Максим Мурадьян aka Rootik
Posix.ru
2005-08-23
Все дисковые накопители и их первичные и логические разделы в системе Linux, как и в других вариантах Unix, являются файлами, расположенными в каталоге /dev (в этом каталоге расположены файлы не только дисковых накопителей, но и других устройств). Кстати, обратите внимание, что в *nix-ах разделителем каталогов является символ /, а не \ как в Windows.
Флоппи-дисководы в Linux именуются /dev/fd0 и /dev/fd1, что соответствует дисководам A: и B: в терминологии DOS/Windows. Имя устройства, подключенного к интерфейсу IDE/EIDE/ATAPI, строится по следующему правилу:
=============================== | Канал IDE | Первый | Второй | =============================== | Master | hda | hdc | | Slave | hdb | hdd | ===============================
То есть, винчестер, подключенный к первому каналу IDE как Master, будет представлен файлом /dev/hda.
Обратите внимание - если у Вас единственный винчестер подключен как Slave на втором канале, то это будет /dev/hdd, несмотря на то, что hda, hdb, hdc не заняты.
Жесткие диски SCSI именуются (в порядке подключения к шине) /dev/sda, /dev/sdb и т.д. Обратите внимание - накопители, подключаемые к USB (флэшки, USB-винчестеры...), SATA-диски ОС Linux распознает как SCSI-накопители и именует соответствующим образом.
Дисковые разделы IDE и SCSI накопителей именуются по одному принципу - цифрами после буквенного идентификатора. При этом за первичными разделами (Primary Partition, которых не может быть на физическом диске более четырех) зарезервированы цифры от 1 до 4, т.е. если диск, например IDE Primary Master, разбит на четыре первичных раздела, то они будут именоваться /dev/hda1, /dev/hda2, /dev/hda3, /dev/hda4.
Логические разделы (Volume) внутри расширенного раздела (Extended Partition) получают номера начиная с 5, вне зависимости от количества первичных разделов. Например, если у нас есть диск с двумя первичными разделами (один простой и один расширенный) и расширенный раздел имеет, в свою очередь, 2 логических раздела (такой случай весьма частый, если диск разбивали с помощью средств под Windows), то структура диска будет такой:
/dev/hda1 первичный раздел /dev/hda2 расширенный первичный раздел /dev/hda5 логический раздел /dev/hda6 логический раздел
Сменные накопители типа CD-ROM, будут обозначаться только буквами без цифр (например /dev/hdc).
Нужно отметить, что в ядрах Linux до версии 2.6 запись CD-R и CD-RW с интерфейсом IDE осуществлялась через эмуляцию SCSI. В этом случае привод получит наименование /dev/scd0. Если приводов несколько, то будут еще и /dev/scd1, /dev/scd2 и т.д.
В некоторых дистрибувах (в частности в ASPLinux) для удобства пользователей создается псевдоустройство /dev/cdrom, которое на самом деле является симлинком (symlink, сымволическая ссылка) на соответствующее устройство IDE (/dev/hd...) или эмулированное через SCSI (/dev/scd...). Если устройств несколько, то будет еще и /dev/cdrom1 и т.д. В дальнейшей работе можно пользоваться именно этими псевдоустройствами - уменьшается вероятность ошибки.
Наименования разделов и приводов никак не связаны с типами файловых систем на этих разделах и носителях.
Файловые системы (диски - в терминологии DOS/Windows), которые Вы предполагаете использовать в работе, должны быть смонтированы, т.е. включены в иерархию каталогов общей файловой системы, начинающейся с корневого (/) каталога. Делается это командой mount.
Например, у нас есть жесткий диск со следующей структурой:
/dev/hda1 первичный раздел с файловой системой NTSC и ОС Windows XP /dev/hda2 первичный расширенный раздел /dev/hda5 логический раздел с FAT32 (дик D: в Windows) /dev/hda6 SWAP-раздел Linux (создается при установке Linux) /dev/hda7 логический раздел с файловой системой ext3, является корневым (/), с установленной ОС Linux (создается при установке Linux)
SWAP-раздел и корневой раздел при загрузке Linux монтируются автоматически (это тот минимум, необходимый для нормальной работы системы). Мы хотим подключить раздел /dev/hda5, на котором находится общая для обеих систем информация, скажем, музыка, фильмы, документы.
Описываемые далее команды должны выполняться с правами root.
Для начала нужно создать каталог, куда будет монтироваться наш раздел (например, fat32). Для размещения таких каталогов принято использовать каталог /mnt (это необязательно, но лучше придерживаться стандарта). В консоли вводим комнду:
$ mkdir /mnt/fat32
Или в любом файловом менеджере (Midnight Comannder) переходим в /mnt, жмем F7, вводим fat32, нажимаем Enter. Вводим команду:
$ mount /dev/hda5 /mnt/fat32
Смотрим содержимое каталога /mnt/fat32. Из консоли:
$ ls /mnt/fat32
Или переходим в этот каталог в файловом менеджере. И видим, что там содержится все, что было на диске D: в Windows.
В большинстве случаев Linux автоматом определяет тип файловой системы, но если у Вас этого не произошло (невезуха), то можно ввести команду mount с параметром -t тип_ФС. Тип ФС может быть такой:
msdos - FAT16 vfat - FAT32 ntfs - ну понятно ufs - ФС FreeBSD или OpenBSD iso9660 - ФС CD-ROM
Их на самом деле больше, но я остальных не знаю:). Тогда наша команда mount приобретет такой вид:
$ mount -t vfat /dev/hda5 /mnt/fat32
Сменный диск, например флоппик, будет монтироваться аналогично:
$ mount /dev/fd0 /mnt/floppy
Каталог /mnt/floppy создается автоматически при установке Linux если в компьютере установлен дисковод (как и каталог /mnt/cdrom).
Если на диске D: в Windows имелись названия каталогов и файлов, содержащие кириллицу, а системная кодировка Linux не CP1251 (обычно используется KOI8-R), то для нормального отображения таких имен надо вводить команду mount так:
$ mount -t vfat -o iocharset=koi8-r,codepage=866 /dev/hda5 /mnt/fat32
-o - означает опции, iocharset=koi8-r - кодировка символов кириллицы в Linux, codepage=866 - кодировка Microsoft для имен файлов с кириллицей.
После работы с временно смонтированной файловой системой ее необходимо размонтировать командой umount. Для жестких дисков это необязательно - они размонтируются при перезагрузке или выключении, а вот дискеты или CD-ROM при смене или извлечении размонтировани обязательно. Причем CD-ROM Вы не сможете извлечь без размонтирования (Linux блокирует кнопку выброса). А вот с дискетой важно не забыть об этой операции. Если извлечь дискету без размонтирования, а потом перейти в каталог, где она была смонтирована, может наступить крах файловой системы с возможной порчей данных.
Размонтируем дискету так:
$ umount /mnt/floppy
CD-ROM
$ umount /mnt/cdrom
В любой момент можно узнать, какие системы смонтированы, введя команду:
$ mount
Кстати, аудио-CD в монтировании не нуждаются.
Если Вы используете Linux в графическом режиме (X Window), то менеджеры рабочего стола KDE и GNOME автоматически создают пиктограммы на рабочем столе для монтирования и размонтирования Floppy и CD-ROM.
Разделы, на которых располагается сам Linux и часто используемые данные, должны быть доступны постоянно. Их настраивают так, чтобы они монтировались при загрузке системы. Список таких устройств и условия их монтирования находятся в файле /etc/fstab.
Вот для примера листинг моего файла /etc/fstab:
# /etc/fstab: static file system information. # #/dev/hda6 none swap sw 0 0 /dev/hda7 / ext3 defaults,errors=remount-ro 0 1 /dev/hda8 /var ext3 defaults 0 1 /dev/hda9 /home ext3 defaults 0 1 /dev/hda5 /mnt/common vfat noauto,user,iocharset=koi8-r,codepage=866 0 0 /dev/hdd1 /mnt/mobil vfat noauto,user,iocharset=koi8-r,codepage=866 0 0 /dev/sda1 /mnt/flash vfat noauto,user,iocharset=koi8-r,codepage=866 0 0 proc /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0 none /dev/pts devpts gid=5,mode=620 0 0 /dev/cdrom /mnt/cdrom udf,iso9660 noauto,user,kudzu,ro,iocharset=koi8-r 0 0 /dev/fd0 /mnt/floppy auto noauto,user,kudzu,iocharset=koi8-r,codepage=866 0 0
Строки
/dev/hda6 none swap sw 0 0 /dev/hda7 / ext3 defaults,errors=remount-ro 0 1 /dev/hda8 /var ext3 defaults 0 1 /dev/hda9 /home ext3 defaults 0 1 proc /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0 none /dev/pts devpts gid=5,mode=620 0 0 /dev/cdrom /mnt/cdrom udf,iso9660 noauto,user,kudzu,ro,iocharset=koi8-r 0 0 /dev/fd0 /mnt/floppy auto noauto,user,kudzu,iocharset=koi8-r,codepage=866 0 0
создал инсталлятор Linux, остальные я добавлял сам. Строки, начинающиеся с #, являются комментариями.
Каждая строка отвечает за монтирование одной файловой системы. Вначале указывается само устройство или файловая система, которую хотите автоматом монтировать, через пробел или табуляцию - точка монтирования (каталог, куда произойдет монтирование, должен быть создан заранее), тип файловой системы, опции, условие резервного копирования (dump), проверка файловой системы при загрузке после неудачного завершения работы (pass).
Подробнее об опциях. noauto - означает запрет автоматического монтирования (дискеты или CD-ROM может не быть в приводе), user - монтировать и демонтировать файловую систему может любой пользователь (другие возможные значения: owner - монтировать и демонтировать может только владелец данной файловой системы, если ничего не указано - монтировать и демонтировать может только root), kudzu - разрешена утилита автопоиска диска в приводе, iocharset=koi8-r,codepage=866 - уже рассматривали.
Опций, конечно, гораздо больше. Все они мне неизвестны. Если хотите узнать побольше, выполните команду:
$ man fstab
и получите подробнейшее руководство по настройке этого файла. Редактировать этот файл можно в любом текстовом редакторе (vi - консольный, встроенный в Midnight Commander (вызывается по F4), графические Kate, Kedit, Gedit...)
Я уже упоминал, что все диски в Linux - это файлы. Из этого следует, что к ним применимы все команды работы с файлами. Например, команда копирования:
$ cp /dev/cdrom /home/maks/cdrom.iso
Такая команда скопирует все данные с CD-ROM и создаст его iso-образ в файле cdrom.iso. Потом этот образ можно закатать на болванку консольной или графической утилитой... А можно с ним поступить вот так:
$ mount -t iso9660 -o loop /home/maks/cdrom.iso /mnt/cdrom
Этим мы примонтируем iso-образ и в каталоге /mnt/cdrom увидим содержимое того диска, с которого этот образ был снят. Опция loop показывает, что это не реальное устройство, а файл образа.
Заметьте, все это делалось встроенными средствами операционной системы. Все это есть в любом дистрибутиве Linux. И, идя к товарищу, не нужно тащить с собой диски с инсталляшками различных дополнительных утилит, на случай если у него их нет.
Можно снимать образы разделов жесткого диска для резервирования или переноса на другой диск. В общем много всего...
И вот такой «финт». Задаем команду:
$ dd if=/dev/zero of=/home/maks/proba bs=1024 count=1024
Этим в домашнем каталоге пользователя maks будет создан файл proba (of - output file), «набитый» нулями из фиктивного устройства /dev/zero (if - input file) и размером в 1 Мб (будет отсчитано 1024 блока (count) по 1024 байт (bs)).
А потом возьмем и... отформатируем его (ну, пользователи Windows, как вам - отформатировать файл:) )
$ /sbin/mkfs.ext2 proba
Будет сообщение, что это на самом деле не устройство, но форматирование произойдет и в файле будет создана файловая система ext2 - «родная» для Linux.
Теперь, уже известной командой, примонтируем этот файл:
$ mount -t ext2 -o loop /home/maks/proba /mnt/proba
Мы получили стандартными средствами ОС файл, являющийся виртуальным диском. В него можно писать (и читать) другие файлы. Loop-устройства имеют еще и опции шифрования, так что мы получаем полный аналог Discreet из Нортоновских утилит.
Вот на этой оптимистичной ноте и завершу эту статью...
При написании этой статьи использовались материалы из Руководства администратора ASPLinux, мануалы по командам mount и umount, советы друзей из Сети и собственный опыт.