w Roman" class="ws12">
Файловые системы и монтирование
В Linux есть драйверы для чтения и записи файлов в обычной файловой системе FAT и более новой системе VFAT, которая появилась в Windows 95 и поддерживает длинные имена файлов. Linux может читать (и с некоторыми ограничениями записывать) файловую систему NTFS Windows NT/2000/XP. В разделе «Сборка нового ядра» главы 18 вы научились собирать собственное ядро. Для доступа к разделам DOS (используется MS-DOS и Windows 3.x) и VFAT (используется Windows 95/98/МЕ) необходимо включить параметр DOS FAT fs support в разделе Filesystems во время настройки ядра. После установки этого параметра можно включить параметры MSDOS fs support и VFAT (Windows-95) fs support. Первый параметр позволяет монтировать разделы FAT, а второй - разделы FAT32. Если требуется доступ к файлам в разделе Windows NT с файловой системой NTFS, то нужен другой драйвер.
Во время настройки ядра включите параметр NTFS f ilesystem support. Это позволит монтировать разделы NTFS, указав в качестве типа файловой системы ntfs. Учтите, что в настоящее время драйвер NTFS поддерживает доступ только для чтения. Существует версия этого драйвера, которая поддерживает и запись, но на момент написания книги она все еще находилась на стадии разработки и не гарантировала надежной работы при записи в раздел NTFS. Внимательно прочтите документацию, прежде чем устанавливать ее и работать с ней! Во время работы Linux можно монтировать разделы Windows так же, как любые другие типы разделов.
Если, например, третий раздел на первом диске IDE содержит установленную копию Windows 98, вы можете сделать его файлы доступными с помощью следующей команды, которую надо выполнить, зарегистрировавшись в качестве root: # mount -t vfat /dev/hda3 /mnt/windows98 Здесь /dev/hdaS указывает на диск, соответствующий диску Windows 98, а параметр /mnt/windows98 может быть изменен на любой каталог, который вы создали для доступа к этим файлам. Но как узнать, что вам нужен именно /dev/hda3? Если вы уже знакомы с соглашениями об именах для файловых систем Linux, то знаете, что hda3 - это главный диск на первом IDE-порте. Можно облегчить себе жизнь, записав имена разделов во время их создания с помощью fdisk, но если вы этого не сделали, можно снова запустить fdisk и посмотреть на таблицу разделов. Драйверы файловых систем поддерживают ряд параметров, которые можно задавать с помощью ключа -о команды mount. Параметры описаны на страницах справочного руководства mount(8), отдельные разделы посвящены параметрам, специфичным для файловых систем fat и ntfs. Раздел с описанием параметров файловой системы fat, два из которых представляют особый интерес, относится к обеим файловым системам - msdos и vfat.
Параметр check указывает ядру, что делать с именами файлов, недопустимыми в MS-DOS. Это относится только к созданию и переименованию файлов. Вы можете указать три значения для check: relaxed позволит сделать с именем файла практически все что угодно. Если имя не отвечает соглашению 8.3 для файлов MS-DOS, оно будет соответствующим образом укорочено, normal, являющееся значением по умолчанию, также сократит длинные имена файлов, но, кроме того, удалит специальные символы, такие как и ?, недопустимые в именах файлов MS-DOS. Наконец, strict запрещает и длинные имена файлов, и спецсимволы. Для того чтобы потребовать от Linux строгости по отношению к именам файлов в смонтированном ранее разделе, команду mount можно использовать следующим образом: # mount -о check=strict -t msdos /dev/sda5 /mnt/dos Этот параметр применим только к файловым системам msdos; ограничения на длину файла не относятся к файловой системе vfat. Второй параметр, conv, может оказаться полезен, но не так широко, как покажется на первый взгляд. Системы Windows и UNIX пользуются разными соглашениями относительно того, как указывать конец строки в текстовых файлах. Windows использует и возврат каретки, и символ перевода строки, в то время как UNIX использует только символ перевода строки.
Это не значит, что файл из одной системы нельзя прочесть на другой, но может сильно мешать. Чтобы ядро автоматически выполняло преобразование форматов текстовых файлов Windows и UNIX, необходимо выполнить команду mount с параметром conv. Здесь возможны три значения: binary, являющееся значением по умолчанию, не выполняет никакого преобразования; text преобразует все файлы; и auto пытается по расширению имени файла определить, является ли файл текстовым или двоичным. Если расширение входит в список «известных двоичных расширений», файл не преобразуется, иначе преобразование выполняется. Обычно не рекомендуется использовать text, так как это приведет к повреждению любых двоичных файлов, включая графические файлы и файлы, написанные в текстовых процессорах, электронных таблицах и других программах. Может оказаться опасным и auto, так как механизм распознавания, основанный на расширениях, слишком прост. Поэтому мы не рекомендуем применять параметр conv, если только раздел не содержит исключительно текстовые файлы. Устанавливайте режим binary (значение по умолчанию) и преобразовывайте файлы по мере необходимости. Ниже в этой главе есть раздел «Утилиты преобразования файлов» с указаниями, как это делать.
Файловые системы MS-DOS и NTFS, как и все остальные, можно автоматически монтировать во время начальной загрузки, для чего нужно поместить в файл /etc/ fstab соответствующую запись. Например, следующая строка в /etc/fstab монтирует раздел Windows 98 в каталоге/win: /dev/hda1 /win vfat defaults,umask=002,uid=500,gid=500 0 0 При доступе из Linux к одной из файловых систем msdos, vfat или ntfs системе приходится каким-то способом присваивать файлам права доступа и владения, предусматриваемые UNIX. По умолчанию права доступа и владения определяются с помощью UID, GID и маски, устанавливаемой по умолчанию вызывающим процессом. Такой принцип приемлем при выполнении команды mount из оболочки, но при выполнении из загрузочных сценариев владельцем файлов будет назначаться суперпользователь, что может быть нежелательно. В приведенном выше примере параметр umask устанавливает маску, которую система будет использовать при создании файлов и каталогов. Параметр uid задает владельца (в виде числового UID, а не текстового имени), а параметр gid задает группу (в виде числового GID). Все файлы на монтируемом разделе будут иметь в Linux владельца и группу. Поскольку системы с загрузкой альтернативных операционных систем обычно используются как рабочие станции, принадлежащие одному пользователю, параметрам uid и gid можно дать значения UID и GID этого пользователя.