Глава 8. Диски, файловые системы и начальные загрузчики

8.1. Как добавить в систему новый диск?
8.2. Как перенести систему на большой новый диск?
8.3. На каких разделах можно без опаски использовать механизм Soft Updates? Я слышал, что использование Soft Updates на / могут приводить к проблемам. Что насчёт журналируемых Soft Updates?
8.4. Можно ли смонтировать другие файловые системы?
8.5. Как смонтировать вторичный раздел DOS?
8.6. Существует ли криптографическая файловая система для FreeBSD?
8.7. Как загрузить FreeBSD и Linux(R) с помощью GRUB?
8.8. Как загрузить FreeBSD и Linux(R) с помощью BootEasy?
8.9. Как сменить приглашение загрузчика с ??? на что-нибудь более значащее?
8.10. Как использовать устройство для чтения сменных дисков?
8.11. При монтировании компакт-диска выдаётся сообщение Incorrect super block.
8.12. При монтировании компакт-диска выдаётся сообщение Device not configured.
8.13. Когда я монтирую CD-ROM, все неанглийские символы в именах файлов выводятся как <>.
8.14. Записанный во FreeBSD CD не читается ни в какой другой операционной системой. Почему?
8.15. Как создать образ CD с данными?
8.16. Почему я не могу смонтировать (командой mount аудио CD?
8.17. Как выполнить mount для многосеансового CD?
8.18. Как разрешить обычным пользователям монтировать компакт-диски, DVD, USB-диски и другие сменные носители?
8.19. Команды du и df показывают разный объем доступного дискового пространства. Что происходит?
8.20. Как добавить дополнительную виртуальную память?
8.21. Почему FreeBSD считает, что размер моего диска меньше, чем заявляет его производитель?
8.22. Почему возможно заполнение раздела больше чем на 100%?
8.23. Почему загрузка FreeBSD задерживается на длительное время на системах с большим объёмом ОЗУ?

8.1.

Как добавить в систему новый диск?

Обратитесь к разделу Добавление дисков Руководства FreeBSD.

8.2.

Как перенести систему на большой новый диск?

Самый лучший способ заключается в переустановке операционной системы на новый диск с последующим переносом пользовательских данных. Это настоятельно рекомендуется при отслеживании ветки -STABLE в течение более одного релиза или при обновлении релиза вместо установки нового. Установите booteasy на оба диска с помощью boot0cfg(8) и выполняйте загрузку с любого из них, пока не будете довольны новой конфигурацией. Пропустите следующий абзац, чтобы перейти к вопросу переноса данных после этой операции.

Либо разбейте на разделы и разметьте новый диск с помощью sade(8) или gpart(8). Если диски отформатированы в MBR, то booteasy можно установить на оба диска с помощью boot0cfg(8) для того, чтобы иметь возможность выполнять загрузку как старой, так и новой системы после выполнения копирования.

После подготовки диска данные нельзя просто так взять и перенести. Используйте для этого инструменты, которые учитывают файлы устройств и системные флаги, например, dump(8). И хотя рекомендуется выполнять перенос данных в однопользовательском режиме, это не является обязательным условием.

Если на дисках стоит UFS, никогда не используйте ничего, кроме dump(8) и restore(8) для переноса корневой файловой системы. Эти команды также следует использовать при переносе отдельного раздела на другой пустой раздел. Последовательность шагов при использовании dump для переноса данных с раздела UFS на новый раздел:

  1. выполните команду newfs над новым разделом.

  2. командой mount смонтируйте его во временный каталог.

  3. командой cd перейдите в этот каталог.

  4. выполните команду dump над старым разделом, направив вывод в новый раздел.

Например, чтобы перенести корневую файловую систему на устройство /dev/ada1s1a с использованием каталога /mnt в качестве временной точки монтирования, наберите:

# newfs /dev/ad1as1a
# mount /dev/ad1as1a /mnt
# cd /mnt
# dump 0af - / | restore rf -

Переразбиение разделов с использованием dump требует несколько больше усилий. Для объединения раздела типа /var с его вышестоящим разделом, создайте новый раздел, достаточно большой для размещения их обоих, переместите вышестоящий раздел так, как это описано выше, а затем переместите нижестоящий раздел в пустой каталог, созданный при первом перемещении:

# newfs /dev/ada1s1a
# mount /dev/ad1as1a /mnt
# cd /mnt
# dump 0af - / | restore rf -
# cd var
# dump 0af - /var | restore rf -

Для отделения каталога от вышестоящего, скажем, для размещения /var в собственном разделе, которого не было, создайте оба раздела, затем смонтируйте нижестоящий раздел в подходящий каталог во временную точку монтирования, а затем переместите старый единый раздел:

# newfs /dev/ada1s1a
# newfs /dev/ada1s1d
# mount /dev/ada1s1a /mnt
# mkdir /mnt/var
# mount /dev/ada1s1d /mnt/var
# cd /mnt
# dump 0af - / | restore rf -

Для перемещения пользовательских данных также имеются программы cpio(1) и pax(1). Известно, что они теряют информацию о флагах файлов, так что используйте их с осторожностью.

8.3.

На каких разделах можно без опаски использовать механизм Soft Updates? Я слышал, что использование Soft Updates на / могут приводить к проблемам. Что насчёт журналируемых Soft Updates?

Краткий ответ: обычно Soft Updates можно использовать без опаски на всех разделах.

Подробный ответ: Soft Updates имеют две характеристики, которые могут быть нежелательны на некоторых разделах. Во-первых, раздел с Soft Updates имеет небольшой шанс потери данных по время аварийного останова системы. Раздел не будет попорчен, поскольку данные будет просто потеряны. Во-вторых, Soft Updates могут приводить к временной нехватке дискового пространства.

При использовании Soft Updates ядро может задерживать до тридцати секунд запись изменений на физический диск. При удалении большого файла он остается на диске, пока ядро не выполнит фактическое удаление. Это может привести к очень простой гонке. Предположим, удаляется один большой файл и тут же создаётся другой большой файл. Первый файл на самом деле ещё не удалён с диска, поэтому для второго файла на диске может не хватить места. Это приведёт к ошибке о том, что на разделе нет достаточного пространства, несмотря на то, что только что освободилось много места. Через пару секунд создание файла сработает, как и ожидалось.

Если система может аварийно остановиться после того, как ядро примет набор данных для записи на диск, но перед тем, как данные реально запишутся, то данные могут потеряться. Такой риск чрезвычайно мал, но в целом управляем.

Эти проблемы влияют на все разделы, использующие Soft Updates. Итак, что это означает для корневого раздела?

Жизненно важная информация на корневом разделе меняется очень редко. Если в системе произойдет сбой в период тридцатисекундного окна после выполнения такого изменения, возможно, что данные окажутся потерянными. Этот риск незначителен для большинства применений, но его нужно учитывать. Если система не может принять такой риск, не используйте Soft Updates с корневой файловой системой!

/ традиционно является одним из самых маленьких разделов. Если каталог /tmp размещён в / и у вас заполнен /tmp, то могут периодически возникать проблемы с дисковым пространством. Создание символической ссылки /tmp, указывающей на /var/tmp решит эту проблему.

В заключение, dump(8) не работает в режиме реального времени (-L) с файловой системой, для которой включены журналируемые Soft Updates (SU+J).

8.4.

Можно ли смонтировать другие файловые системы?

FreeBSD поддерживает ряд других файловых систем.

UFS

Компакт-диски с файловой системой UFS могут быть смонтированы без всяких проблем. Монтирование файловых систем Digital UNIX или других систем, поддерживающих UFS, может быть более сложным, в зависимости от особенностей разбиения диска конкретной операционной системой.

ext2/ext3

FreeBSD поддерживает разделы ext2fs и ext3fs. За дополнительной информацией обратитесь к странице Справочника ext2fs(5).

NTFS

Поддержка NTFS через FUSE доступна через порт sysutils/fusefs-ntfs. Для получения более полной информации смотрите документацию к ntfs-3g.

FAT

Во FreeBSD имеется драйвер для работы с FAT в режиме чтения-записи. Для получения дополнительной информации обратитесь к странице справочника mount_msdosfs(8).

ZFS

FreeBSD включает в себя портированную из SunTM реализацию файловой системы ZFS. В настоящее время рекомендуется использовать её только на платформе amd64 с достаточным объемом памяти. Для получения более полной информации обратитесь к странице Справочника zfs(8).

FreeBSD включает сетевую файловую систему NFS. В Коллекции портов FreeBSD имеется несколько приложений FUSE для поддержки многих других файловых систем.

8.5.

Как смонтировать вторичный раздел DOS?

Вторичные разделы DOS находятся после всех первичных разделов. Например, если <<E>> является вторым разделом DOS на втором диске SCSI, то здесь будет файл устройства для пятого <<слайса>> в каталоге /dev. Чтобы смонтировать:

# mount -t msdosfs /dev/da1s5 /dos/e

8.6.

Существует ли криптографическая файловая система для FreeBSD?

Да, gbde(8) и geli(8). Смотрите раздел Шифрование дисковых разделов Руководства FreeBSD.

8.7.

Как загрузить FreeBSD и Linux(R) с помощью GRUB?

Для загрузки FreeBSD с использованием GRUB добавьте следующие строки в /boot/grub/menu.lst или /boot/grub/grub.conf, в зависимости от используемого дистрибутива Linux(R).

title FreeBSD 9.1
root (hd0,a)
kernel /boot/loader

Где hd0,a указывает на корневой раздел на первом диске. Чтобы указать номер слайса, напишите что-то вроде (hd0,2,a). По умолчанию, если номер слайса не указан, GRUB ищет первый слайс c разделом a.

8.8.

Как загрузить FreeBSD и Linux(R) с помощью BootEasy?

Установите LILO в начало загрузочного раздела Linux(R), а не в Master Boot Record. После этого LILO можно будет запустить LILO из BootEasy.

Это рекомендуется делать при одновременном использовании Windows(R) и Linux(R), чтобы упростить восстановление работоспособности Linux(R) в случае переустановки Windows(R).

8.9.

Как сменить приглашение загрузчика с ??? на что-нибудь более значащее?

Этого нельзя сделать со стандартным загрузчиком, не переписав его. В категории sysutils Коллекции Портов есть ряд других менеджеров загрузки.

8.10.

Как использовать устройство для чтения сменных дисков?

Если у вас уже есть файловая система на устройстве, то используйте такую команду:

# mount -t msdosfs /dev/da0s1 /mnt

Если это устройство будет использоваться только на системах FreeBSD, то разбейте его на разделы UFS или ZFS. Это обеспечит поддержку длинных имён файлов, увеличение производительности и надёжность. Если устройство будет использоваться с другими операционными системами, то лучше сделать более совместимый выбор, например, msdosfs.

# dd if=/dev/zero of=/dev/da0 count=2
# gpart create -s GPT /dev/da0
# gpart add -t freebsd-ufs /dev/da0

Наконец, остаётся создать новую файловую систему:

# newfs /dev/da0p1

и смонтировать её:

# mount /dev/da0s1 /mnt

Хорошо ещё добавить строку в файл /etc/fstab (прочтите справку по fstab(5)), чтобы в будущем можно было просто давать команду mount /mnt:

/dev/da0p1 /mnt ufs rw,noauto 0 0

8.11.

При монтировании компакт-диска выдаётся сообщение Incorrect super block.

Необходимо указать тип монтируемого устройства. Это описано в в разделе Руководства Использование CD с данными.

8.12.

При монтировании компакт-диска выдаётся сообщение Device not configured.

Обычно это означает, что в приводе нет компакт-диска либо устройство не обнаружено на шине. Обратитесь к разделу Использование CD с данными в Руководстве, где подробно обсуждается этот вопрос.

8.13.

Когда я монтирую CD-ROM, все неанглийские символы в именах файлов выводятся как <<?>>.

Скорее всего, на компакт-диске для хранения информации о файлах и каталогах используется расширение <<Joliet>>. Это описано в разделе Руководства об использовании CD с данными.

8.14.

Записанный во FreeBSD CD не читается ни в какой другой операционной системой. Почему?

Это означает, что на CD был записан непосредственно необработанный файл без создания файловой системы ISO 9660. Прочтите раздел Руководства о записи данных непосредственно на компакт-диски.

8.15.

Как создать образ CD с данными?

Это описано в разделе Руководства о копировании CD с данными. Более полную информацию о работе с компакт-дисками можно найти в разделе о создании компакт-дисков в главе Руководства об устройствах хранения данных.

8.16.

Почему я не могу смонтировать (командой mount аудио CD?

Попытка смонтировать аудио CD приведёт к сообщению об ошибке вида: cd9660: /dev/acd0c: Invalid argument. Причина этого заключается в том, что команда mount работает только с файловыми системами. На аудио CD файловых систем нет; они содержат только данные. Используйте вместо этого программу, которая умеет читать аудио CD, например, порт audio/xmcd.

8.17.

Как выполнить mount для многосеансового CD?

По умолчанию mount(8) будет пытаться смонтировать последнюю дорожку (сеанс) CD с данными. Для загрузки более раннего сеанса используйте параметр командной строки -s. За конкретными примерами обращайтесь к странице Справочника mount_cd9660(8).

8.18.

Как разрешить обычным пользователям монтировать компакт-диски, DVD, USB-диски и другие сменные носители?

Как пользователь root, установите системную переменную vfs.usermount в значение 1.

# sysctl vfs.usermount=1

Чтобы это срабатывало во время загрузки системы, добавьте строчку vfs.usermount=1 в файл /etc/sysctl.conf.

Пользователи могут монтировать только те устройства, к которым у них имеется доступ на чтение. Чтобы разрешить пользователям монтировать устройство, должны быть заданы разрешения в /etc/devfs.conf.

Например, чтобы разрешить пользователям монтировать первое устройство USB, добавьте такую строчку:

# Allow all users to mount a USB drive.
	    own       /dev/da0       root:operator
	    perm      /dev/da0       0666

Теперь все пользователи могут монтировать устройства с правами доступа на чтение в собственные каталоги:

% mkdir ~/my-mount-point
% mount -t msdosfs /dev/da0 ~/my-mount-point

Размонтирование устройства осуществляется просто:

% umount ~/my-mount-point

Использование vfs.usermount, однако, имеет некоторые негативные стороны, связанные с вопросами безопасности. Более правильным способом работы с носителями в формате MS-DOS(R) является использование пакета emulators/mtools из Коллекции Портов.

Примечание:

Имя устройства, использованное в предыдущих примерах, должно быть изменено в соответствии с конфигурацией.

8.19.

Команды du и df показывают разный объем доступного дискового пространства. Что происходит?

Это связано с тем, как эти команды на самом деле работают. du проходит по дереву каталогов, замеряя, насколько большой объем занимает каждый файл, и выдает общий объем. df просто запрашивает файловую систему об оставшемся объеме. Это выглядит как одно и то же, однако файл без записи в каталоге затронет df, но не повлияет на du.

Когда программа использует файл и этот файл удаляется, то на самом деле он не удаляется из файловой системы, пока программа не прекратит его использовать. Однако файл тут же удаляется из списка каталога. Представим себе файл достаточно большого размера, чтобы его присутствие влияло на вывод du и df. Если файл удаляется в процессе работы с ним команды more, команда more не сообщает сразу же, что не может просматривать файл. Запись о файле просто удалена из каталога, так что другие программы или пользователи не смогут к нему обратиться. Тем не менее, du покажет, что файл исчез, поскольку она просматривает дерево каталогов, а файла там нет. df показывает, что файл всё ещё здесь, так как файловая система знает, что more всё ещё использует это пространство. Как только закончится работа с more, команды du и df придут в соответствие.

Такая ситуация часта на Web-серверах. Многие устанавливают Web-сервер на FreeBSD и забывают обновлять файлы протоколов. Журнал доступа заполняет /var. Новый администратор удаляет файл, но система все еще сообщает о том, что раздел заполнен. Остановка и перезапуск программы Web-сервера освободит файл, позволяя системе освободить дисковое пространство. Для предотвращения этого настройте newsyslog(8).

Заметьте, что подсистема отложенных обновлений (Soft Updates) может задерживать освобождение дискового пространства, и может потребоваться до 30 секунд, чтобы изменения стали заметны.

8.20.

Как добавить дополнительную виртуальную память?

В этом разделе Руководства описывается, как это сделать.

8.21.

Почему FreeBSD считает, что размер моего диска меньше, чем заявляет его производитель?

Производители дисков считают гигабайт равным миллиарду байт, а FreeBSD приравнивает его к 1073741824 байт. Это объясняет, почему, к примеру, в сообщениях при загрузке FreeBSD указывается, что ёмкость диска, объём которого должен быть равным 80 Гбайт, составляет 76319 Мбайт.

Заметьте также, что FreeBSD будет (по умолчанию) резервировать 8% ёмкости диска.

8.22.

Почему возможно заполнение раздела больше чем на 100%?

Часть каждого раздела UFS (по умолчанию 8%) зарезервировано для использования операционной системой и пользователем root. Утилита df(1) не учитывает это при подсчёте значения в колонке Capacity, так что оно может превышать 100%. Обратите внимание, что колонка Blocks всегда больше, чем сумма значений в колонках Used и Avail, обычно на 8%.

Для получения более подробной информации обратитесь к описанию опции -m в справке по tunefs(8).

8.23.

Почему загрузка FreeBSD задерживается на длительное время на системах с большим объёмом ОЗУ?

FreeBSD выполняет короткую проверку памяти на раннем этапе загрузки. Обычно эта проверка занимает всего несколько секунд, но если система имеет много десятков или сотен Гбайт памяти, это можно занять до нескольких минут. Эту проверку можно отключить, установив hw.memtest.tests в значение 0 в /boot/loader.conf.

Для получения дополнительной информации смотрите страницу Справочника loader.conf(5).

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.

По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.