# gpart create -s GPT ada1
# gpart add -t freebsd-ufs -a 1M ada1Глава 20. Устройства хранения
Этот перевод может быть устаревшим. Для того, чтобы помочь с переводом, пожалуйста, обратитесь к Сервер переводов FreeBSD.
Содержание
20.1. Обзор
Эта глава посвящена использованию дисков и носителей данных в FreeBSD. Сюда входят SCSI- и IDE-диски, CD- и DVD-носители, диски в памяти и USB-устройства хранения данных.
Прочитав эту главу, вы будете знать:
Как добавить дополнительные жесткие диски в систему FreeBSD.
Как увеличить размер раздела диска в FreeBSD.
Как настроить FreeBSD для использования USB-накопителей.
Как использовать CD и DVD носители в системе FreeBSD.
Как использовать программы резервного копирования, доступные в FreeBSD.
Как настроить диски в памяти.
Что такое снимки файловой системы и как их эффективно использовать.
Как использовать квоты для ограничения использования дискового пространства.
Как зашифровать диски и раздел подкачки для защиты от злоумышленников.
Как настроить сеть хранения данных с высокой доступностью.
Прежде чем читать эту главу, вы должны:
20.2. Добавление дисков
В этом разделе описывается, как добавить новый диск SATA к компьютеру, в котором в настоящее время установлен только один накопитель. Сначала выключите компьютер и установите диск, следуя инструкциям производителей компьютера, контроллера и диска. Перезагрузите систему и войдите в систему как root.
Проверьте /var/run/dmesg.boot, чтобы убедиться, что новый диск обнаружен. В этом примере новый SATA-диск будет отображаться как ada1.
Для этого примера на новом диске будет создан один большой раздел. Схема разделов GPT будет использована вместо более старой и менее универсальной схемы MBR.
Если добавляемый диск не пуст, старую информацию о разделах можно удалить с помощью |
Создается схема разделов, а затем добавляется единственный раздел. Для повышения производительности на новых дисках с большими размерами аппаратных блоков раздел выравнивается по границам одного мегабайта:
В зависимости от использования может потребоваться несколько небольших разделов. См. gpart(8) для вариантов создания разделов меньше целого диска.
Информацию о разделах диска можно просмотреть с помощью gpart show:
% gpart show ada1
=> 34 1465146988 ada1 GPT (699G)
34 2014 - free - (1.0M)
2048 1465143296 1 freebsd-ufs (699G)
1465145344 1678 - free - (839K)Создается файловая система в новом разделе на новом диске:
# newfs -U /dev/ada1p1Создается пустой каталог как точка монтирования — место для подключения нового диска в файловой системе исходного диска:
# mkdir /newdiskНаконец, в файл /etc/fstab добавляется запись, чтобы новый диск автоматически монтировался при загрузке:
/dev/ada1p1 /newdisk ufs rw 2 2
Новый диск можно подключить вручную без перезагрузки системы:
# mount /newdisk20.3. Изменение размера и увеличение дисков
Емкость диска может быть увеличена без изменения уже имеющихся данных. Это часто происходит с виртуальными машинами, когда виртуальный диск оказывается слишком маленьким и его расширяют. Иногда образ диска записывается на USB-накопитель, но не использует его полную емкость. Здесь мы описываем, как изменить размер или расширить содержимое диска, чтобы использовать увеличенную емкость.
Определите имя устройства диска, который нужно изменить, просмотрев /var/run/dmesg.boot. В этом примере в системе только один SATA-диск, поэтому диск будет отображаться как ada0.
Перечислите разделы на диске, чтобы увидеть текущую конфигурацию:
# gpart show ada0
=> 34 83886013 ada0 GPT (48G) [CORRUPT]
34 128 1 freebsd-boot (64k)
162 79691648 2 freebsd-ufs (38G)
79691810 4194236 3 freebsd-swap (2G)
83886046 1 - free - (512B)Если диск был отформатирован с использованием схемы разделов GPT, он может отображаться как "повреждённый", поскольку резервная таблица разделов GPT больше не находится в конце диска. Восстановите резервную таблицу разделов с помощью |
Теперь дополнительное пространство на диске доступно для использования новым разделом или для расширения существующего раздела:
# gpart show ada0
=> 34 102399933 ada0 GPT (48G)
34 128 1 freebsd-boot (64k)
162 79691648 2 freebsd-ufs (38G)
79691810 4194236 3 freebsd-swap (2G)
83886046 18513921 - free - (8.8G)Разделы можно изменять в размере только в пределах непрерывного свободного пространства. В данном случае последним разделом на диске является раздел подкачки, но требуется изменить размер второго раздела. Поскольку разделы подкачки содержат только временные данные, их можно безопасно отмонтировать, удалить, а затем заново создать третий раздел после изменения размера второго раздела.
Отключить раздел подкачки:
# swapoff /dev/ada0p3Удалите третий раздел, указанный флагом -i, с диска ada0.
# gpart delete -i 3 ada0
ada0p3 deleted
# gpart show ada0
=> 34 102399933 ada0 GPT (48G)
34 128 1 freebsd-boot (64k)
162 79691648 2 freebsd-ufs (38G)
79691810 22708157 - free - (10G)Существует риск потери данных при изменении таблицы разделов смонтированной файловой системы. Наилучшим вариантом будет выполнение следующих шагов на размонтированной файловой системе, загрузившись с Live CD-ROM или USB-устройства. Однако, если это крайне необходимо, смонтированную файловую систему можно изменить, отключив защитные механизмы GEOM: |
Измените размер раздела, оставив место для создания раздела подкачки нужного размера. Раздел, который нужно изменить, указывается с помощью -i, а новый желаемый размер — с помощью -s. Дополнительно выравнивание раздела контролируется с помощью -a. Это изменяет только размер раздела. Файловая система в разделе будет расширена в отдельном шаге.
# gpart resize -i 2 -s 47G -a 4k ada0
ada0p2 resized
# gpart show ada0
=> 34 102399933 ada0 GPT (48G)
34 128 1 freebsd-boot (64k)
162 98566144 2 freebsd-ufs (47G)
98566306 3833661 - free - (1.8G)Воссоздайте раздел подкачки и активируйте его. Если размер не указан с помощью -s, используется все оставшееся пространство:
# gpart add -t freebsd-swap -a 4k ada0
ada0p3 added
# gpart show ada0
=> 34 102399933 ada0 GPT (48G)
34 128 1 freebsd-boot (64k)
162 98566144 2 freebsd-ufs (47G)
98566306 3833661 3 freebsd-swap (1.8G)
# swapon /dev/ada0p3Увеличьте файловую систему UFS, чтобы использовать новую ёмкость изменённого раздела:
# growfs /dev/ada0p2
Device is mounted read-write; resizing will result in temporary write suspension for /.
It's strongly recommended to make a backup before growing the file system.
OK to grow file system on /dev/ada0p2, mounted on /, from 38GB to 47GB? [Yes/No] Yes
super-block backups (for fsck -b #) at:
80781312, 82063552, 83345792, 84628032, 85910272, 87192512, 88474752,
89756992, 91039232, 92321472, 93603712, 94885952, 96168192, 97450432Если файловая система ZFS, изменение размера запускается выполнением подкоманды online с ключом -e:
# zpool online -e zroot /dev/ada0p2Как раздел, так и файловая система на нем теперь изменены в размере для использования нового доступного пространства на диске.
20.4. USB-накопители
Многие внешние устройства хранения данных, такие как жесткие диски, USB-флешки, а также устройства для записи CD и DVD, используют универсальную последовательную шину (USB). FreeBSD поддерживает устройства USB 1.x, 2.0 и 3.0.
Поддержка USB 3.0 несовместима с некоторым оборудованием, включая чипсеты Haswell (Lynx point). Если FreeBSD загружается с сообщением |
Поддержка USB-накопителей встроена в ядро GENERIC. Для собственной сборки ядра убедитесь, что следующие строки присутствуют в конфигурационном файле ядра:
device scbus # SCSI bus (required for ATA/SCSI) device da # Direct Access (disks) device pass # Passthrough device (direct ATA/SCSI access) device uhci # provides USB 1.x support device ohci # provides USB 1.x support device ehci # provides USB 2.0 support device xhci # provides USB 3.0 support device usb # USB Bus (required) device umass # Disks/Mass storage - Requires scbus and da device cd # needed for CD and DVD burners
FreeBSD использует драйвер umass(4), который задействует подсистему SCSI для доступа к USB-устройствам хранения данных. Поскольку любое USB-устройство будет распознаваться системой как SCSI-устройство, если USB-устройство является записывающим CD- или DVD-приводом, не включайте device atapicam в конфигурационный файл пользовательского ядра.
Оставшаяся часть этого раздела демонстрирует, как убедиться, что USB-накопитель распознаётся FreeBSD, и как настроить устройство для использования.
20.4.1. Настройка устройств
Для проверки конфигурации USB подключите USB-устройство. Используйте dmesg, чтобы убедиться, что устройство появилось в системном буфере сообщений. Результат должен выглядеть примерно так:
umass0: <STECH Simple Drive, class 0/0, rev 2.00/1.04, addr 3> on usbus0
umass0: SCSI over Bulk-Only; quirks = 0x0100
umass0:4:0:-1: Attached to scbus4
da0 at umass-sim0 bus 0 scbus4 target 0 lun 0
da0: <STECH Simple Drive 1.04> Fixed Direct Access SCSI-4 device
da0: Serial Number WD-WXE508CAN263
da0: 40.000MB/s transfers
da0: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)
da0: quirks=0x2<NO_6_BYTE>Марка, файл устройства (da0), скорость и размер будут отличаться в зависимости от устройства.
Поскольку USB-устройство распознаётся как SCSI, для вывода списка USB-накопителей, подключённых к системе, можно использовать camcontrol:
# camcontrol devlist
<STECH Simple Drive 1.04> at scbus4 target 0 lun 0 (pass3,da0)Или можно использовать usbconfig для вывода списка устройств. Дополнительную информацию об этой команде смотрите в usbconfig(8).
# usbconfig
ugen0.3: <Simple Drive STECH> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)Если устройство не было отформатировано, обратитесь к Добавление дисков для получения инструкций по форматированию и созданию разделов на USB-накопителе. Если накопитель поставляется с файловой системой, он может быть смонтирован пользователем root с помощью инструкций из «Монтирование и размонтирование файловых систем».
Разрешение непривилегированным пользователям монтировать произвольные носители путем включения |
Чтобы устройство можно было монтировать обычным пользователем, одним из решений является добавление всех пользователей устройства в группу operator с помощью pw(8). Затем убедитесь, что группа operator имеет права на чтение и запись устройства, добавив следующие строки в /etc/devfs.rules:
[localrules=5] add path 'da*' mode 0660 group operator
Если в системе также установлены внутренние SCSI-диски, измените вторую строку следующим образом: add path 'da[3-9]*' mode 0660 group operator Это исключит первые три SCSI-диска (da0 — da2) из принадлежности к группе |
Затем включите набор правил в /etc/rc.conf:
devfs_system_ruleset="localrules"
Затем настройте систему для разрешения обычным пользователям монтировать файловые системы, добавив следующую строку в /etc/sysctl.conf:
vfs.usermount=1
Поскольку это вступит в силу только после следующей перезагрузки, используйте sysctl, чтобы установить эту переменную сейчас:
# sysctl vfs.usermount=1
vfs.usermount: 0 -> 1Последним шагом является создание каталога, в который будет монтироваться файловая система. Этот каталог должен принадлежать пользователю, который будет монтировать файловую систему. Один из способов сделать это — создать подкаталог от имени root, принадлежащий этому пользователю, например /mnt/username. В следующем примере замените username на имя пользователя, а usergroup на основную группу пользователя:
# mkdir /mnt/username
# chown username:usergroup /mnt/usernameПредположим, подключена USB-флешка, и появилось устройство /dev/da0s1. Если устройство отформатировано с файловой системой FAT, пользователь может смонтировать его с помощью:
% mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/usernameПрежде чем устройство можно будет отключить, его необходимо размонтировать:
% umount /mnt/usernameПосле удаления устройства в системном буфере сообщений будут отображены сообщения, аналогичные следующим:
umass0: at uhub3, port 2, addr 3 (disconnected)
da0 at umass-sim0 bus 0 scbus4 target 0 lun 0
da0: <STECH Simple Drive 1.04> s/n WD-WXE508CAN263 detached
(da0:umass-sim0:0:0:0): Periph destroyed20.4.2. Автомонтирование съемных носителей
USB-устройства могут автоматически монтироваться при раскомментировании этой строки в /etc/auto_master:
/media -media -nosuidЗатем добавьте следующие строки в /etc/devd.conf:
notify 100 {
match "system" "GEOM";
match "subsystem" "DEV";
action "/usr/sbin/automount -c";
};# service automount restart
# service devd restartautofs(5) можно настроить для запуска при загрузке, добавив следующую строку в /etc/rc.conf:
autofs_enable="YES"
Запустите службы немедленно с помощью:
# service automount start
# service automountd start
# service autounmountd start
# service devd startКаждая файловая система, которая может быть автоматически смонтирована, отображается как каталог в /media/. Каталог именуется в соответствии с меткой файловой системы. Если метка отсутствует, каталог именуется в соответствии с устройством.
Файловая система автоматически монтируется при первом доступе и размонтируется после периода неактивности. Автомонтируемые диски также можно размонтировать вручную:
# automount -fuЭтот механизм обычно используется для карт памяти и USB-флешек. Он может применяться с любыми блочными устройствами, включая оптические приводы или iSCSI LUN.
20.5. Создание и использование CD-носителей
Компакт-диски (CD) обладают рядом особенностей, которые отличают их от обычных дисков. Они спроектированы так, чтобы их можно было читать непрерывно без задержек на перемещение головки между дорожками. Хотя на CD действительно есть дорожки, они обозначают участки данных, предназначенные для непрерывного чтения, а не физическое свойство диска. Файловая система ISO 9660 была разработана для работы с этими различиями.
Коллекция портов FreeBSD предоставляет несколько утилит для записи и копирования аудио- и данных на CD. В этой главе демонстрируется использование нескольких утилит командной строки. Для записи CD с графическим интерфейсом можно установить пакеты или порты sysutils/xcdroast или sysutils/k3b.
20.5.1. Поддерживаемые устройства
Ядро GENERIC обеспечивает поддержку SCSI, USB и устройств чтения и записи ATAPICD. Если используется собственное ядро, параметры, которые должны присутствовать в конфигурационном файле ядра, зависят от типа устройства.
Для SCSI-устройства, записывающего CD или DVD диски, убедитесь, что присутствуют следующие параметры:
device scbus # SCSI bus (required for ATA/SCSI) device da # Direct Access (disks) device pass # Passthrough device (direct ATA/SCSI access) device cd # needed for CD and DVD burners
Для USB-привода убедитесь, что указаны следующие параметры:
device scbus # SCSI bus (required for ATA/SCSI) device da # Direct Access (disks) device pass # Passthrough device (direct ATA/SCSI access) device cd # needed for CD and DVD burners device uhci # provides USB 1.x support device ohci # provides USB 1.x support device ehci # provides USB 2.0 support device xhci # provides USB 3.0 support device usb # USB Bus (required) device umass # Disks/Mass storage - Requires scbus and da
Для ATAPI устройств, записывающих CD или DVD диски, убедитесь, что указаны следующие параметры:
device ata # Legacy ATA/SATA controllers device scbus # SCSI bus (required for ATA/SCSI) device pass # Passthrough device (direct ATA/SCSI access) device cd # needed for CD and DVD burners
В версиях FreeBSD до 10.x эта строка также необходима в конфигурационном файле ядра, если устройство записи является ATAPI-устройством: device atapicam В качестве альтернативы, этот драйвер можно загрузить при загрузке, добавив следующую строку в файл /boot/loader.conf: atapicam_load="YES" Это потребует перезагрузки системы, так как этот драйвер может быть загружен только во время загрузки. |
Чтобы убедиться, что FreeBSD распознает устройство, выполните команду dmesg и найдите запись об этом устройстве. В системах до версии 10.x имя устройства в первой строке вывода будет acd0 вместо cd0.
% dmesg | grep cd
cd0 at ahcich1 bus 0 scbus1 target 0 lun 0
cd0: <HL-DT-ST DVDRAM GU70N LT20> Removable CD-ROM SCSI-0 device
cd0: Serial Number M3OD3S34152
cd0: 150.000MB/s transfers (SATA 1.x, UDMA6, ATAPI 12bytes, PIO 8192bytes)
cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed20.5.2. Запись компакт-диска
В FreeBSD для записи компакт-дисков можно использовать cdrecord. Эта команда устанавливается с пакетом или портом sysutils/cdrtools.
Хотя cdrecord имеет множество опций, базовое использование просто. Укажите имя ISO-файла для записи и, если в системе несколько устройств для записи, укажите имя используемого устройства:
# cdrecord dev=device imagefile.isoЧтобы определить имя устройства записывающего привода, используйте -scanbus, что может дать результат, подобный следующему:
# cdrecord -scanbus
ProDVD-ProBD-Clone 3.00 (amd64-unknown-freebsd10.0) Copyright (C) 1995-2010 Jörg Schilling
Using libscg version 'schily-0.9'
scsibus0:
0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk
0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk
0,2,0 2) *
0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk
0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *
scsibus1:
1,0,0 100) *
1,1,0 101) *
1,2,0 102) *
1,3,0 103) *
1,4,0 104) *
1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM
1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner
1,7,0 107) *Найдите запись устройство для записи CD и используйте три числа, разделенные запятыми, в качестве значения для dev. В данном случае устройство Yamaha имеет значение 1,5,0, поэтому правильный ввод для указания этого устройства — dev=1,5,0. Обратитесь к руководству cdrecord для других способов указания этого значения, а также для получения информации о записи аудиодорожек и управлении скоростью записи.
Или выполните следующую команду, чтобы получить адрес записывающего устройства:
# camcontrol devlist
<MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (cd0,pass0)Используйте числовые значения для scbus, target и lun. В этом примере 1,0,0 — это имя устройства, которое следует использовать.
20.5.3. Запись данных в файловую систему ISO
Для создания компакт-диска с данными файлы, которые будут составлять дорожки на диске, необходимо подготовить перед записью на CD. В FreeBSD пакет sysutils/cdrtools устанавливает mkisofs, который можно использовать для создания файловой системы ISO 9660, представляющей образ дерева каталогов в UNIX® файловой системе. Простейший способ использования — указать имя создаваемого ISO-файла и путь к файлам, которые нужно поместить в файловую систему ISO 9660:
# mkisofs -o imagefile.iso /path/to/treeЭта команда сопоставляет имена файлов в указанном пути с именами, соответствующими ограничениям стандартной файловой системы ISO 9660, и исключает файлы, не соответствующие стандарту для файловых систем ISO.
Для преодоления ограничений стандарта доступен ряд опций. В частности, -R включает расширения Rock Ridge, распространённые в системах UNIX®, а -J включает расширения Joliet, используемые в системах Microsoft®.
Для компакт-дисков, которые будут использоваться только в системах FreeBSD, можно применить -U для отключения всех ограничений на имена файлов. При использовании вместе с -R создаётся образ файловой системы, идентичный указанному дереву FreeBSD, даже если он нарушает стандарт ISO 9660.
Последняя опция общего назначения — -b. Она используется для указания местоположения загрузочного образа при создании загрузочного CD в формате "El Torito". Эта опция принимает аргумент — путь к загрузочному образу относительно корня дерева, записываемого на CD. По умолчанию mkisofs создаёт образ ISO в режиме "эмуляции флоппи-диска", поэтому ожидает, что загрузочный образ будет иметь размер ровно 1200, 1440 или 2880 КБ. Некоторые загрузчики, например, используемые на дистрибутивных носителях FreeBSD, не применяют режим эмуляции. В этом случае следует использовать опцию -no-emul-boot. Таким образом, если /tmp/myboot содержит загрузочную систему FreeBSD с загрузочным образом в /tmp/myboot/boot/cdboot, то следующая команда создаст /tmp/bootable.iso:
# mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/mybootПолученный образ ISO можно подключить как диск в памяти с помощью:
# mdconfig -a -t vnode -f /tmp/bootable.iso -u 0
# mount -t cd9660 /dev/md0 /mntЗатем можно убедиться, что /mnt и /tmp/myboot идентичны.
Доступно множество других опций для mkisofs, позволяющих точно настроить его поведение. Подробности смотрите в mkisofs(8).
Возможно скопировать компакт-диск с данными в файл образа, функционально эквивалентный файлу образа, созданному с помощью Полученный файл образа можно записать на компакт-диск, как описано в Запись компакт-диска. |
20.5.4. Использование компакт-дисков с данными
После записи ISO-образа на компакт-диск его можно смонтировать, указав тип файловой системы, имя устройства с компакт-диском и существующую точку монтирования:
# mount -t cd9660 /dev/cd0 /mntПоскольку mount предполагает, что файловая система имеет тип ufs, ошибка Incorrect super block возникнет, если не указать -t cd9660 при монтировании компакт-диска с данными.
В то время как любой компакт-диск с данными можно смонтировать таким образом, диски с определёнными расширениями ISO 9660 могут работать неожиданно. Например, диски Joliet хранят все имена файлов в двухбайтовых символах Unicode. Если некоторые неанглийские символы отображаются как знаки вопроса, укажите локальную кодировку с помощью -C. Для получения дополнительной информации обратитесь к mount_cd9660(8).
Для выполнения этого преобразования символов с помощью опции cd9660_iconv_load="YES" и затем перезагрузить машину, или напрямую загрузить модуль с помощью |
Изредка при попытке смонтировать компакт-диск с данными может отображаться сообщение Device not configured. Обычно это означает, что привод не обнаружил диск в лотке или что привод не виден на шине. Обнаружение носителя может занять несколько секунд, поэтому следует набраться терпения.
Иногда привод SCSICD может быть пропущен, потому что у него не хватило времени ответить на сброс шины. Чтобы решить эту проблему, можно создать пользовательское ядро с увеличенной задержкой SCSI по умолчанию. Добавьте следующую опцию в конфигурационный файл собственного ядра и пересоберите ядро, следуя инструкциям в “Сборка и установка собственного ядра”:
options SCSI_DELAY=15000
Это указывает шине SCSI сделать паузу в 15 секунд во время загрузки, чтобы дать CD-приводу максимальный шанс ответить на сброс шины.
Возможно записать файл непосредственно на CD без создания файловой системы ISO 9660. Это называется записью сырых данных на CD, и некоторые люди делают это для целей резервного копирования. Такой диск нельзя смонтировать как обычный CD с данными. Чтобы извлечь данные, записанные на такой диск, их необходимо прочитать непосредственно с устройства. Например, следующая команда извлечёт сжатый tar-архив со второго CD-устройства в текущую рабочую директорию: Для монтирования компакт-диска с данными они должны быть записаны с использованием |
20.5.5. Копирование аудио-CD
Для копирования аудио-CD извлеките аудиоданные с диска в виде набора файлов, затем запишите эти файлы на чистый CD.
В Копирование аудио-CD описано, как дублировать и записывать аудио-CD. Если версия FreeBSD меньше 10.0 и устройство является ATAPI, необходимо сначала загрузить модуль atapicam, следуя инструкциям в Поддерживаемые устройства.
Пакет или порт sysutils/cdrtools устанавливает
cdda2wav. Эту команду можно использовать для извлечения всех аудиодорожек, при этом каждая дорожка записывается в отдельный WAV-файл в текущей рабочей директории:% cdda2wav -vall -B -OwavИмя устройства не нужно указывать, если в системе только одно устройство CD. Обратитесь к руководству
cdda2wavдля получения инструкций по указанию устройства и дополнительной информации о других параметрах этой команды.Используйте
cdrecordдля записи файлов .wav:% cdrecord -v dev=2,0 -dao -useinfo *.wavУбедитесь, что 2,0 установлено правильно, как описано в Запись CD.
20.6. Создание и использование DVD-носителей
По сравнению с компакт-диском, DVD представляет собой следующее поколение технологии хранения данных на оптических носителях. DVD может вмещать больше данных, чем любой компакт-диск, и является стандартом для издания видео.
Для записываемого DVD можно определить пять физических форматов записи:
DVD-R: Это первый доступный формат записываемых DVD. Стандарт DVD-R определен DVD Forum. Этот формат поддерживает однократную запись.
DVD-RW: Это перезаписываемая версия стандарта DVD-R. DVD-RW можно перезаписывать около 1000 раз.
DVD-RAM: Это перезаписываемый формат, который можно рассматривать как съемный жесткий диск. Однако, этот носитель не совместим с большинством приводов DVD-ROM и DVD-видеоплееров, так как лишь немногие DVD-рекордеры поддерживают формат DVD-RAM. Дополнительную информацию об использовании DVD-RAM см. в Использование DVD-RAM.
DVD+RW: Это перезаписываемый формат, определенный альянсом DVD+RW Alliance. DVD+RW можно перезаписывать около 1000 раз.
DVD+R: Этот формат является однократно записываемой разновидностью формата DVD+RW.
Однослойный записываемый DVD может вместить до 4 700 000 000 байт, что фактически составляет 4,38 ГБ или 4485 МБ, так как 1 килобайт равен 1024 байтам.
Необходимо различать физический носитель и приложение. Например, DVD-Video — это определённая структура файлов, которую можно записать на любой перезаписываемый DVD-носитель, такой как DVD-R, DVD+R или DVD-RW. Перед выбором типа носителя убедитесь, что и записывающее устройство, и проигрыватель DVD-Video поддерживают рассматриваемый носитель. |
20.6.1. Конфигурация
Для записи DVD используйте growisofs(1). Эта команда входит в набор утилит sysutils/dvd+rw-tools, которые поддерживают все типы DVD-носителей.
Эти инструменты используют подсистему SCSI для доступа к устройствам, поэтому поддержка ATAPI/CAM должна быть загружена или статически собрана в ядре. Эта поддержка не требуется, если устройство записи использует интерфейс USB. Подробнее о настройке USB-устройств см. в разделе USB-накопители.
Доступ DMA также должен быть включен для устройств ATAPI, добавив следующую строку в /boot/loader.conf:
hw.ata.atapi_dma="1"
Перед попыткой использования dvd+rw-tools ознакомьтесь с примечаниями о совместимости оборудования.
Для графического интерфейса можно использовать пакет sysutils/k3b, который предоставляет удобный интерфейс к growisofs(1) и многим другим инструментам записи. |
20.6.2. Запись данных на DVD
Поскольку growisofs(1) является интерфейсом для mkisofs, он вызывает mkisofs(8) для создания структуры файловой системы и записи на DVD. Это означает, что нет необходимости создавать образ данных перед процессом записи.
Для записи данных из /path/to/data на DVD+R или DVD-R используйте следующую команду:
# growisofs -dvd-compat -Z /dev/cd0 -J -R /path/to/dataВ этом примере -J -R передаются в mkisofs(8) для создания файловой системы ISO 9660 с расширениями Joliet и Rock Ridge. Подробности см. в mkisofs(8).
Для начальной записи сессии используется параметр -Z как для одиночных, так и для множественных сессий. Замените /dev/cd0 на имя устройства DVD. Использование -dvd-compat указывает, что диск будет закрыт и запись нельзя будет дополнять. Это также обеспечивает лучшую совместимость носителя с приводами DVD-ROM.
Для записи предварительно созданного образа, например imagefile.iso, используйте:
# growisofs -dvd-compat -Z /dev/cd0=imagefile.isoСкорость записи должна определяться и автоматически устанавливаться в зависимости от носителя и используемого привода. Для принудительного задания скорости записи используйте -speed=. Примеры использования см. в growisofs(1).
Для поддержки файлов размером более 4,38 ГБ необходимо создать гибридную файловую систему UDF/ISO-9660, передав параметры Чтобы создать ISO-файл такого типа: Для записи файлов непосредственно на диск: Когда ISO-образ уже содержит большие файлы, для записи этого образа на диск с помощью Убедитесь, что используется актуальная версия sysutils/cdrtools, которая содержит mkisofs(8), так как более старая версия может не поддерживать большие файлы. Если последняя версия не работает, установите sysutils/cdrtools-devel и ознакомьтесь с его mkisofs(8). |
20.6.3. Запись DVD-Video
DVD-Video — это определённая структура файлов, основанная на спецификациях ISO 9660 и микро-UDF (M-UDF). Поскольку DVD-Video представляет собой конкретную иерархию структуры данных, для создания DVD требуется специальная программа, например multimedia/dvdauthor.
Если уже существует образ файловой системы DVD-Video, его можно записать так же, как и любой другой образ. Если для создания DVD использовался dvdauthor и результат находится в /path/to/video, то для записи DVD-Video следует использовать следующую команду:
# growisofs -Z /dev/cd0 -dvd-video /path/to/video-dvd-video передается в mkisofs(8), чтобы указать создать файловую систему в формате DVD-Video. Эта опция подразумевает использование опции -dvd-compat growisofs(1).
20.6.4. Использование DVD+RW
В отличие от CD-RW, новая DVD+RW требует форматирования перед первым использованием. Рекомендуется позволить growisofs(1) автоматически выполнить это, когда это уместно. Однако можно использовать dvd+rw-format для форматирования DVD+RW:
# dvd+rw-format /dev/cd0Выполняйте эту операцию только один раз и помните, что форматировать нужно только чистые носители DVD+RW. После форматирования DVD+RW можно записывать как обычно.
Для записи совершенно новой файловой системы, а не просто добавления данных на DVD+RW, не требуется предварительно очищать носитель. Вместо этого можно перезаписать предыдущую запись следующим образом:
# growisofs -Z /dev/cd0 -J -R /path/to/newdataФормат DVD+RW поддерживает добавление данных к предыдущей записи. Эта операция заключается в объединении нового сеанса с существующим, так как это не считается многосессионной записью. growisofs(1) будет расширять файловую систему ISO 9660, присутствующую на носителе.
Например, чтобы добавить данные на DVD+RW, используйте следующую команду:
# growisofs -M /dev/cd0 -J -R /path/to/nextdataТе же параметры mkisofs(8), которые использовались для записи начальной сессии, следует применять при последующих записях.
Используйте |
Для очистки диска запустите:
# growisofs -Z /dev/cd0=/dev/zero20.6.5. Использование DVD-RW
DVD-RW поддерживает два формата дисков: инкрементальный последовательный и с ограниченной перезаписью. По умолчанию диски DVD-RW имеют последовательный формат.
Чистый DVD-RW можно записывать напрямую без форматирования. Однако DVD-RW в последовательном формате, который уже использовался, необходимо очистить перед записью нового начального сеанса.
Для очистки DVD-RW в последовательном режиме:
# dvd+rw-format -blank=full /dev/cd0Полное стирание с использованием Поскольку growisofs(1) автоматически определяет быстро очищенные носители и использует запись DAO, параметр Следует использовать режим ограниченной перезаписи для любых DVD-RW, так как этот формат более гибкий по сравнению со стандартным инкрементным последовательным. |
Для записи данных на последовательную DVD-RW используйте те же инструкции, что и для других форматов DVD:
# growisofs -Z /dev/cd0 -J -R /path/to/dataЧтобы добавить данные к предыдущей записи, используйте -M с growisofs(1). Однако если данные добавляются на DVD-RW в инкрементальном последовательном режиме, на диске будет создана новая сессия, и в результате получится многосессионный диск.
DVD-RW в формате с ограниченной перезаписью не требует очистки перед созданием новой начальной сессии. Вместо этого перезапишите диск с помощью -Z. Также можно расширить существующую файловую систему ISO 9660, записанную на диск, с помощью -M. Результатом будет односессионный DVD.
Чтобы перевести DVD-RW в формат ограниченной перезаписи, необходимо использовать следующую команду:
# dvd+rw-format /dev/cd0Для возврата к последовательному формату используйте:
# dvd+rw-format -blank=full /dev/cd020.6.6. Многосеансовые диски
Немногие приводы DVD-ROM поддерживают многосеансовые DVD и в большинстве случаев читают только первый сеанс. DVD+R, DVD-R и DVD-RW в последовательном формате могут поддерживать несколько сеансов. Понятие множественных сеансов отсутствует для форматов DVD+RW и DVD-RW с ограниченной перезаписью.
Используя следующую команду после начального незакрытого сеанса на DVD+R, DVD-R или DVD-RW в последовательном формате, можно добавить новый сеанс на диск:
# growisofs -M /dev/cd0 -J -R /path/to/nextdataИспользование этой команды с DVD+RW или DVD-RW в режиме ограниченной перезаписи приведет к добавлению данных с объединением нового сеанса с существующим. В результате получится диск с одним сеансом. Используйте этот метод для добавления данных после первоначальной записи на таких типах носителей.
Поскольку некоторое пространство на носителе используется между каждым сеансом для отметки конца и начала сеансов, следует добавлять сеансы с большим объемом данных для оптимизации пространства на носителе. Количество сеансов ограничено 154 для DVD+R, около 2000 для DVD-R и 127 для DVD+R Double Layer. |
20.6.7. Для получения дополнительной информации
Для получения дополнительной информации о DVD используйте команду dvd+rw-mediainfo /dev/cd0, когда диск находится в указанном приводе.
Дополнительная информация о dvd+rw-tools доступна в growisofs(1), на веб-сайте dvd+rw-tools и в архивах почтовой рассылки cdwrite.
При создании отчёта о проблеме, связанной с использованием dvd+rw-tools, всегда прилагайте вывод команды |
20.6.8. Использование DVD-RAM
Записывающие устройства DVD-RAM могут использовать интерфейс SCSI или ATAPI. Для устройств ATAPI необходимо включить доступ DMA, добавив следующую строку в /boot/loader.conf:
hw.ata.atapi_dma="1"
DVD-RAM можно рассматривать как съемный жесткий диск. Как и любой другой жесткий диск, DVD-RAM необходимо отформатировать перед использованием. В этом примере все дисковое пространство будет отформатировано под стандартную файловую систему UFS2:
# dd if=/dev/zero of=/dev/acd0 bs=2k count=1
# bsdlabel -Bw acd0
# newfs /dev/acd0Устройство DVD, acd0, должно быть изменено в соответствии с конфигурацией.
После форматирования DVD-RAM его можно подключить как обычный жесткий диск:
# mount /dev/acd0 /mntПосле монтирования DVD-RAM будет доступен как для чтения, так и для записи.
20.7. Создание и использование дискет
Этот раздел объясняет, как отформатировать 3,5-дюймовую дискету в FreeBSD.
Procedure: Steps to Format a Floppy
Дискету необходимо отформатировать на низком уровне перед использованием. Обычно это делается производителем, но форматирование — хороший способ проверить целостность носителя. Для низкоуровневого форматирования дискеты в FreeBSD используйте fdformat(1). При работе с этой утилитой обратите внимание на сообщения об ошибках, так как они помогают определить, исправен диск или нет.
Для форматирования дискеты вставьте новую дискету размером 3,5 дюйма в первый дисковод и выполните команду:
# /usr/sbin/fdformat -f 1440 /dev/fd0После низкоуровневого форматирования диска создайте метку диска, так как она необходима системе для определения размера диска и его геометрии. Поддерживаемые значения геометрии перечислены в /etc/disktab.
Для записи метки диска используйте bsdlabel(8):
# /sbin/bsdlabel -B -w /dev/fd0 fd1440Дискета теперь готова для высокоуровневого форматирования с файловой системой. Файловая система дискеты может быть UFS или FAT, причём FAT, как правило, является лучшим выбором для дискет.
Чтобы отформатировать дискету в FAT, выполните:
# /sbin/newfs_msdos /dev/fd0
Диск готов к использованию. Чтобы использовать дискету, смонтируйте её с помощью mount_msdosfs(8). Также можно установить и использовать emulators/mtools из Коллекции портов.
20.8. Основы резервного копирования
Реализация плана резервного копирования необходима для возможности восстановления после выхода диска из строя, случайного удаления файлов, повреждения данных или полного уничтожения машины, включая уничтожение локальных резервных копий.
Тип резервного копирования и его расписание будут варьироваться в зависимости от важности данных, необходимой детализации для восстановления файлов и допустимого времени простоя. Некоторые возможные методы резервного копирования включают:
Архивы всей системы, сохраненные на постоянных носителях вне площадки. Это обеспечивает защиту от всех перечисленных выше проблем, но восстановление происходит медленно и неудобно, особенно для непривилегированных пользователей.
Снимки файловой системы, полезные для восстановления удалённых файлов или предыдущих версий файлов.
Копии целых файловых систем или дисков, которые синхронизируются с другой системой в сети с использованием запланированного пакета:net/rsync.
Аппаратный или программный RAID, который минимизирует или исключает простои при отказе диска.
Обычно используется комбинация методов резервного копирования. Например, можно создать расписание для автоматического еженедельного полного резервного копирования системы, которое хранится за пределами основной площадки, и дополнить его ежечасными снимками ZFS. Кроме того, можно вручную создавать резервные копии отдельных каталогов или файлов перед их редактированием или удалением.
В этом разделе описаны некоторые утилиты, которые можно использовать для создания резервных копий и управления ими в системе FreeBSD.
20.8.1. Резервное копирование файловой системы
Традиционные программы UNIX® для резервного копирования файловой системы — это dump(8), который создаёт резервную копию, и restore(8), который восстанавливает данные из резервной копии. Эти утилиты работают на уровне блоков диска, ниже абстракций файлов, ссылок и каталогов, создаваемых файловыми системами. В отличие от другого программного обеспечения для резервного копирования, dump создаёт резервную копию всей файловой системы и не может сохранить только часть файловой системы или дерево каталогов, расположенное на нескольких файловых системах. Вместо записи файлов и каталогов dump записывает непосредственно блоки данных, из которых состоят файлы и каталоги.
Если |
При восстановлении данных restore по умолчанию сохраняет временные файлы в /tmp/. Если используется диск восстановления с малым объемом /tmp, следует установить переменную TMPDIR в каталог с большим свободным пространством для успешного выполнения восстановления.
При использовании dump следует учитывать, что некоторые особенности остались с ранних времен версии 6 AT&T UNIX®, примерно 1975 года. Параметры по умолчанию предполагают резервное копирование на 9-дорожечную магнитную ленту, а не на другой тип носителя или на современные высокоплотные ленты. Эти значения по умолчанию необходимо переопределять в командной строке.
Возможно выполнить резервное копирование файловой системы через сеть на другую систему или на ленточный накопитель, подключенный к другому компьютеру. Хотя для этого можно использовать утилиты rdump(8) и rrestore(8), они не считаются безопасными.
Вместо этого можно более безопасно использовать dump и restore через SSH-соединение. Этот пример создает полную сжатую резервную копию /usr и отправляет её на указанный хост через SSH-соединение.
dump через ssh# /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \
targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gzЭтот пример устанавливает переменную окружения RSH для записи резервной копии на ленточный накопитель в удалённой системе через SSH-соединение:
dump через ssh с установленной переменной RSH# env RSH=/usr/bin/ssh /sbin/dump -0uan -f targetuser@targetmachine.example.com:/dev/sa0 /usrСистемы, использующие файловую систему Z (ZFS), могут использовать zfs(8) для создания снимков, а также их отправки и получения на удалённые системы или с них. |
20.8.2. Резервное копирование каталогов
Некоторые встроенные утилиты могут делать резервное копирование и восстановление указанных файлов и каталогов по мере необходимости.
Хорошим выбором для создания резервной копии всех файлов в каталоге является tar(1). Эта утилита появилась ещё в шестой версии AT&T UNIX® и по умолчанию предполагает рекурсивное резервное копирование на локальное ленточное устройство. С помощью ключей можно указать имя файла для резервной копии.
Этот пример создаёт сжатую резервную копию текущего каталога и сохраняет её в /tmp/mybackup.tgz. При создании резервной копии убедитесь, что она не сохраняется в тот же каталог, который резервируется.
tar# tar czvf /tmp/mybackup.tgz .Для восстановления всей резервной копии перейдите в каталог, в который нужно восстановить данные, и укажите имя резервной копии. Обратите внимание, что это перезапишет более новые версии файлов в каталоге восстановления. Если есть сомнения, восстановите данные во временный каталог или укажите имя файла внутри резервной копии для восстановления.
tar# tar xzvf /tmp/mybackup.tgzСуществуют десятки доступных параметров, описанных в tar(1). Эта утилита также поддерживает использование шаблонов исключения для указания, какие файлы не должны включаться при резервном копировании указанного каталога или восстановлении файлов из резервной копии.
Для создания резервной копии с использованием указанного списка файлов и каталогов подходит утилита cpio(1). В отличие от tar, cpio не умеет обходить дерево каталогов и требует предоставления списка файлов для резервирования.
Например, список файлов можно создать с помощью ls или find. Этот пример создаёт рекурсивный список текущего каталога, который затем передаётся в cpio для создания резервной копии с именем /tmp/mybackup.cpio.
ls и cpio для создания рекурсивной резервной копии текущего каталога# ls -R | cpio -ovF /tmp/mybackup.cpioУтилита для резервного копирования, которая пытается объединить возможности, предоставляемые tar и cpio, — это pax(1). С течением времени различные версии tar и cpio стали немного несовместимыми. POSIX® создал pax, который пытается читать и записывать многие из различных форматов cpio и tar, а также новые собственные форматы.
Эквивалент pax для предыдущих примеров будет:
pax# pax -wf /tmp/mybackup.pax .20.8.3. Использование магнитных лент для резервного копирования
В то время как технология ленточных накопителей продолжает развиваться, современные системы резервного копирования обычно сочетают удалённое резервное копирование с локальными съёмными носителями. FreeBSD поддерживает любые ленточные накопители, использующие SCSI, такие как LTO или DAT. Поддержка SATA и USB ленточных накопителей ограничена.
Для SCSI-ленточных устройств FreeBSD использует драйвер sa(4) и устройства /dev/sa0, /dev/nsa0 и /dev/esa0. Физическое имя устройства — /dev/sa0. При использовании /dev/nsa0 программа резервного копирования не перематывает ленту после записи файла, что позволяет записывать несколько файлов на одну ленту. Использование /dev/esa0 приводит к извлечению ленты после закрытия устройства.
В FreeBSD mt используется для управления операциями ленточного накопителя, например, для поиска файлов на ленте или записи управляющих меток на ленту. Например, первые три файла на ленте можно сохранить, пропустив их перед записью нового файла:
# mt -f /dev/nsa0 fsf 3Эта утилита поддерживает множество операций. Подробности смотрите в mt(1).
Для записи одного файла на ленту с помощью tar укажите имя устройства ленты и файл для резервного копирования:
# tar cvf /dev/sa0 fileДля восстановления файлов из архива tar на ленте в текущий каталог:
# tar xvf /dev/sa0Для резервного копирования файловой системы UFS используйте dump. В этом примере выполняется резервное копирование /usr без перемотки ленты по завершении:
# dump -0aL -b64 -f /dev/nsa0 /usrДля интерактивного восстановления файлов из файла dump на ленте в текущий каталог:
# restore -i -f /dev/nsa020.8.4. Сторонние утилиты резервного копирования
Коллекция портов FreeBSD предоставляет множество сторонних утилит, которые можно использовать для планирования создания резервных копий, упрощения резервного копирования на ленточные накопители, а также для повышения удобства и простоты этого процесса. Многие из этих приложений работают по принципу клиент-сервер и позволяют автоматизировать резервное копирование как отдельной системы, так и всех компьютеров в сети.
Популярные утилиты включают:
Amanda (misc/amanda-server и misc/amanda-client),
Bacula (sysutils/bacula13-server и sysutils/bacula13-client),
Bareos (sysutils/bareos-server и sysutils/bareos-client),
20.8.5. Процедура восстановления при сбое
В дополнение к регулярному резервному копированию рекомендуется выполнить следующие шаги в рамках плана подготовки к чрезвычайным ситуациям.
Создайте печатную копию вывода следующих команд:
gpart showmore /etc/fstabpkg prime-listdmesg
Сохраните эту распечатку и копию установочного носителя в надежном месте. В случае необходимости аварийного восстановления загрузитесь с установочного носителя и выберите Live CD для доступа к оболочке-спасателю — режиму аварийного восстановления. Этот режим восстановления можно использовать для просмотра текущего состояния системы и, при необходимости, для переразметки дисков и восстановления данных из резервных копий.
Затем протестируйте аварийную оболочку и резервные копии. Задокументируйте процедуру. Храните эти записи вместе с носителями, распечатками и резервными копиями. Эти заметки могут предотвратить случайное уничтожение резервных копий в стрессовой ситуации во время аварийного восстановления.
Для дополнительной безопасности храните последнюю резервную копию в удалённом месте, физически отделённом от компьютеров и дисков на значительное расстояние.
20.9. Диски в памяти
В дополнение к физическим дискам FreeBSD также поддерживает создание и использование RAM-дисков. Один из возможных вариантов применения RAM-диска — доступ к содержимому файловой системы ISO без необходимости предварительной записи на CD или DVD с последующим монтированием CD/DVD-носителя.
В FreeBSD драйвер md(4) используется для поддержки дисков в памяти. Ядро GENERIC включает этот драйвер. При использовании пользовательского конфигурационного файла ядра убедитесь, что он содержит следующую строку:
device md
20.9.1. Присоединение и отсоединение существующих образов
Для подключения существующего образа файловой системы используйте mdconfig, указав имя файла ISO и свободный номер устройства. Затем, используя этот номер устройства, подключите его к существующей точке монтирования. После подключения файлы из ISO будут доступны в точке монтирования. В этом примере diskimage.iso подключается к устройству в памяти /dev/md0, которое затем монтируется в /mnt:
# mdconfig -f diskimage.iso -u 0
# mount -t cd9660 /dev/md0 /mntОбратите внимание, что -t cd9660 был использован для монтирования формата ISO. Если номер устройства не указан с помощью -u, mdconfig автоматически выделит неиспользуемый диск в памяти и выведет имя выделенного устройства, например, md4. Дополнительные сведения о данной команде и её параметрах можно найти в mdconfig(8).
Когда диск в памяти больше не используется, его ресурсы должны быть возвращены обратно системе. Сначала размонтируйте файловую систему, затем используйте mdconfig для отключения диска от системы и освобождения его ресурсов. Чтобы продолжить этот пример:
# umount /mnt
# mdconfig -d -u 0Чтобы определить, подключены ли к системе какие-либо диски в памяти, введите mdconfig -l.
20.9.2. Создание диска в памяти на основе файла или памяти
FreeBSD также поддерживает диски в памяти, где хранилище выделяется либо с жёсткого диска, либо из области памяти. Первый метод обычно называют файловой системой на основе файла, а второй — файловой системой на основе памяти. Оба типа можно создать с помощью mdconfig.
Для создания новой файловой системы в памяти укажите тип swap и размер создаваемого диска в памяти. Затем отформатируйте диск в памяти файловой системой и смонтируйте его как обычно. В этом примере создаётся диск в памяти размером 5M на устройстве 1. Этот диск в памяти затем форматируется файловой системой UFS перед монтированием:
# mdconfig -a -t swap -s 5m -u 1
# newfs -U md1
/dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 1.27MB, 81 blks, 192 inodes.
with soft updates
super-block backups (for fsck -b #) at:
160, 2752, 5344, 7936
# mount /dev/md1 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md1 4718 4 4338 0% /mntЧтобы создать новый файловый диск в памяти, сначала выделите область на диске для использования. В этом примере создается пустой файл размером 5 МБ с именем newimage:
# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records outЗатем подключите этот файл к диску в памяти, создайте метку диска и отформатируйте его с файловой системой UFS, смонтируйте диск в памяти и проверьте размер диска на основе файла:
# mdconfig -f newimage -u 0
# bsdlabel -w md0 auto
# newfs -U md0a
/dev/md0a: 5.0MB (10224 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 1.25MB, 80 blks, 192 inodes.
super-block backups (for fsck -b #) at:
160, 2720, 5280, 7840
# mount /dev/md0a /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md0a 4710 4 4330 0% /mntДля создания файловой системы на основе файла или оперативной памяти с помощью mdconfig требуется выполнить несколько команд. В FreeBSD также доступна утилита mdmfs, которая автоматически настраивает диск в памяти, форматирует его с файловой системой UFS и монтирует. Например, после создания образа newimage с помощью dd, следующая команда эквивалентна выполнению команд bsdlabel, newfs и mount, приведённых выше:
# mdmfs -F newimage -s 5m md0 /mntЧтобы вместо этого создать новый диск в памяти на основе оперативной памяти с помощью mdmfs, используйте следующую команду:
# mdmfs -s 5m md1 /mntЕсли номер устройства не указан, mdmfs автоматически выберет неиспользуемое устройство памяти. Подробнее о mdmfs см. в mdmfs(8).
20.10. Снимки файловой системы
FreeBSD предлагает функцию в сочетании с мягкими обновлениями: создание снимков файловой системы.
Снимки UFS позволяют пользователю создавать образы указанных файловых систем и работать с ними как с файлами. Если вы используете файловую систему Z (ZFS), обратитесь к Управление снимками для получения информации об использовании снимков.
Файлы снимков должны быть созданы в той файловой системе, над которой выполняется действие, и пользователь может создать не более 20 снимков для каждой файловой системы. Активные снимки записываются в суперблок, поэтому они сохраняются после размонтирования и повторного монтирования, а также после перезагрузки системы. Когда снимок больше не нужен, его можно удалить с помощью rm(1). Хотя снимки можно удалять в любом порядке, не все освобождаемое пространство может быть использовано, так как другой снимок может претендовать на часть освобожденных блоков.
Неизменяемый флаж файла snapshot устанавливается mksnap_ffs(8) после первоначального создания файла снимка. unlink(1) делает исключение для файлов снимков, так как позволяет их удалять.
Снимки создаются с помощью mount(8). Чтобы создать снимок /var в файле /var/snapshot/snap, используйте следующую команду:
# mount -u -o snapshot /var/snapshot/snap /varИли используйте mksnap_ffs(8) для создания снимка:
# mksnap_ffs /var /var/snapshot/snapФайлы снимков можно найти в файловой системе, например, в /var, с помощью find(1):
# find /var -flags snapshotПосле создания моментального снимка он может быть использован несколькими способами:
Некоторые администраторы используют файл снимка для резервного копирования, так как снимок можно перенести на компакт-диски или магнитные ленты.
Проверка целостности файловой системы, fsck(8), может быть запущена на снимке. При условии, что файловая система была чистой на момент монтирования, результат всегда должен быть чистым и неизменным.
Запуск dump(8) на снимке создаст дамп-файл, согласованный с файловой системой и временной меткой снимка. dump(8) также может создать снимок, создать образ дампа и затем удалить снимок одной командой, используя опцию
-L.Снимок может быть смонтирован как замороженный образ файловой системы. Для монтирования снимка /var/snapshot/snap выполните команду mount(8):
# mdconfig -a -t vnode -o readonly -f /var/snapshot/snap -u 4 # mount -r /dev/md4 /mnt
Замороженный /var теперь доступен через /mnt. Все изначально будет находиться в том же состоянии, в котором было на момент создания снимка. Единственное исключение — любые предыдущие снимки будут отображаться как файлы нулевой длины. Чтобы отмонтировать снимок, используйте:
# umount /mnt
# mdconfig -d -u 4Для получения дополнительной информации о softupdates и снимках файловых систем, включая технические документы, посетите веб-сайт Маршалла Кирка Маккусика по адресу http://www.mckusick.com/.
20.11. Квоты на диске
Дисковые квоты могут использоваться для ограничения объёма дискового пространства или количества файлов, которые пользователь или члены группы могут выделить в рамках одной файловой системы. Это предотвращает ситуацию, когда один пользователь или группа пользователей потребляет всё доступное дисковое пространство.
Этот раздел описывает, как настроить квоты дисков для файловой системы UFS. Для настройки квот в файловой системе ZFS обратитесь к Квоты наборов данных, пользователей и групп
20.11.1. Включение квот на диске
Чтобы определить, поддерживает ли ядро FreeBSD квоты дискового пространства:
% sysctl kern.features.ufs_quota
kern.features.ufs_quota: 1В этом примере 1 указывает на поддержку квот. Если значение равно 0, добавьте следующую строку в файл конфигурации собственного ядра и пересоберите ядро, используя инструкции из Настройка ядра FreeBSD:
options QUOTA
Далее включите квоты на диски в /etc/rc.conf:
quota_enable="YES"
Обычно при загрузке проверяется целостность квот для каждой файловой системы с помощью quotacheck(8). Эта программа гарантирует, что данные в базе квот соответствуют данным в файловой системе. Это трудоёмкий процесс, который может значительно увеличить время загрузки системы. Чтобы пропустить этот шаг, добавьте следующую переменную в /etc/rc.conf:
check_quotas="NO"
Наконец, отредактируйте /etc/fstab, чтобы включить квоты диска для каждой файловой системы. Чтобы включить квоты для пользователей в файловой системе, добавьте userquota в поле опций записи /etc/fstab для файловой системы, на которой нужно включить квоты. Например:
/dev/da1s2g /home ufs rw,userquota 1 2
Для включения квот групп используйте groupquota вместо этого. Чтобы включить квоты и для пользователей, и для групп, разделите параметры запятой:
/dev/da1s2g /home ufs rw,userquota,groupquota 1 2
По умолчанию файлы квот хранятся в корневом каталоге файловой системы как quota.user и quota.group. Дополнительную информацию можно найти в fstab(5). Указание альтернативного расположения для файлов квот не рекомендуется.
После завершения настройки перезагрузите систему, и /etc/rc автоматически выполнит соответствующие команды для создания начальных файлов квот для всех включённых квот в /etc/fstab.
В обычном режиме работы нет необходимости вручную запускать quotacheck(8), quotaon(8) или quotaoff(8). Однако рекомендуется ознакомиться с их руководствами, чтобы понимать принцип работы.
20.11.2. Установка ограничений квот
Для проверки включения квот выполните:
# quota -vДолжна быть однострочная сводка об использовании диска и текущих лимитах квот для каждой файловой системы, на которой включены квоты.
Система готова к назначению квот с помощью edquota.
Доступно несколько вариантов для установки ограничений на объем дискового пространства, который может быть выделен пользователю или группе, а также на количество создаваемых ими файлов. Ограничения могут быть установлены на основе объема дискового пространства (блочные квоты), количества файлов (квоты inode) или их комбинации. Каждое ограничение дополнительно разделяется на две категории: жесткие и мягкие лимиты.
Жёсткий лимит не может быть превышен. Как только пользователь достигает жёсткого лимита, он не может выделить дополнительные ресурсы на этой файловой системе. Например, если у пользователя жёсткий лимит в 500 КБ на файловой системе и он уже использует 490 КБ, он может выделить только дополнительные 10 КБ. Попытка выделить дополнительные 11 КБ завершится неудачей.
Мягкие ограничения могут быть превышены на ограниченное время, известное как льготный период, который по умолчанию составляет одну неделю. Если пользователь превышает своё ограничение дольше льготного периода, мягкое ограничение становится жёстким, и дальнейшие выделения ресурсов запрещаются. Когда пользователь снова опускается ниже мягкого ограничения, льготный период сбрасывается.
В следующем примере редактируется квота для учётной записи test. При запуске edquota открывается редактор, указанный в переменной EDITOR, для изменения ограничений квоты. Редактор по умолчанию установлен в vi.
# edquota -u test
Quotas for user test:
/usr: kbytes in use: 65, limits (soft = 50, hard = 75)
inodes in use: 7, limits (soft = 50, hard = 60)
/usr/var: kbytes in use: 0, limits (soft = 50, hard = 75)
inodes in use: 0, limits (soft = 50, hard = 60)Обычно для каждой файловой системы с включенными квотами есть две строки. Одна строка представляет ограничения на блоки, а другая — ограничения на файлы. Измените значение, чтобы изменить лимит квоты. Например, чтобы увеличить лимит блоков для /usr до мягкого лимита 500 и жёсткого лимита 600, измените значения в этой строке следующим образом:
/usr: kbytes in use: 65, limits (soft = 500, hard = 600)
Новые ограничения квот вступают в силу после выхода из редактора.
Иногда требуется установить квоты для диапазона пользователей. Это можно сделать, сначала назначив желаемую квоту для одного пользователя, а затем используя опцию -p для копирования этой квоты в указанный диапазон идентификаторов пользователей (UID). Следующая команда скопирует эти квоты для UID с 10,000 по 19,999:
# edquota -p test 10000-19999Для получения дополнительной информации обратитесь к edquota(8).
20.11.3. Проверка ограничений квот и использования диска
Для проверки квот и использования диска отдельными пользователями или группами используйте quota(1). Пользователь может просматривать только свою собственную квоту и квоту группы, в которой он состоит. Только суперпользователь может просматривать все квоты пользователей и групп. Чтобы получить сводку по всем квотам и использованию диска для файловых систем с включёнными квотами, используйте repquota(8).
Обычно файловые системы, на которых пользователь не занимает места, не отображаются в выводе команды quota, даже если для пользователя установлено ограничение квоты для этой файловой системы. Используйте -v, чтобы отобразить эти файловые системы. Ниже приведён пример вывода quota -v для пользователя, у которого установлены ограничения квоты на двух файловых системах.
Disk quotas for user test (uid 1002):
Filesystem usage quota limit grace files quota limit grace
/usr 65* 50 75 5days 7 50 60
/usr/var 0 50 75 0 50 60В этом примере пользователь превысил мягкое ограничение в 50 Кб на /usr на 15 Кб, и у него осталось 5 дней льготного периода. Звёздочка * указывает, что пользователь в настоящее время превысил ограничение квоты.
20.11.4. Квоты по NFS
Квоты применяются подсистемой квот на NFS-сервере. Демон rpc.rquotad(8) предоставляет информацию о квотах для команды quota на NFS-клиентах, позволяя пользователям на этих машинах просматривать свою статистику по квотам.
На NFS-сервере включите rpc.rquotad, удалив # из этой строки в файле /etc/inetd.conf:
rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad
Затем перезапустите inetd:
# service inetd restart20.12. Шифрование разделов диска
FreeBSD обеспечивает отличную защиту от несанкционированного доступа к данным в режиме онлайн. Права доступа к файлам и Принудительный контроль доступа (MAC) помогают предотвратить доступ к данным неавторизованных пользователей, пока операционная система активна и компьютер включен. Однако принудительно устанавливаемые операционной системой права доступа не имеют значения, если злоумышленник получит физический доступ к компьютеру и сможет переместить его жесткий диск в другую систему для копирования и анализа данных.
Независимо от того, как злоумышленник получил доступ к жесткому диску или выключенному компьютеру, криптографические подсистемы на основе GEOM, встроенные в FreeBSD, способны защитить данные в файловых системах компьютера даже от высокомотивированных злоумышленников с значительными ресурсами. В отличие от методов шифрования, которые шифруют отдельные файлы, встроенные утилиты gbde и geli могут использоваться для прозрачного шифрования целых файловых систем. Ни один открытый текст никогда не попадает на пластину жесткого диска.
Эта глава демонстрирует, как создать зашифрованную файловую систему в FreeBSD. Сначала показан процесс с использованием gbde, а затем приведён тот же пример с использованием geli.
20.12.1. Шифрование диска с gbde
Целью средства gbde(4) является создание серьёзного препятствия для злоумышленника, пытающегося получить доступ к содержимому отключённого устройства хранения данных. Однако, если компьютер скомпрометирован во время работы и устройство хранения активно подключено, или злоумышленник имеет доступ к корректной парольной фразе, это средство не обеспечивает защиты содержимого устройства хранения. Таким образом, важно обеспечивать физическую безопасность системы во время её работы и защищать парольную фразу, используемую механизмом шифрования.
Это средство обеспечивает несколько уровней защиты данных, хранящихся в каждом секторе диска. Оно шифрует содержимое сектора диска с использованием 128-битного AES в режиме CBC. Каждый сектор на диске шифруется с использованием уникального ключа AES. Для получения дополнительной информации о криптографической схеме, включая способ получения ключей секторов из предоставленной пользователем парольной фразы, обратитесь к gbde(4).
FreeBSD предоставляет модуль ядра для gbde, который можно загрузить следующей командой:
# kldload geom_bdeЕсли используется пользовательский конфигурационный файл ядра, убедитесь, что он содержит следующую строку:
options GEOM_BDE
Следующий пример демонстрирует добавление нового жесткого диска в систему, который будет содержать единственный зашифрованный раздел, монтируемый в /private.
Добавьте новый жесткий диск
Установите новый диск в систему, как описано в Добавление дисков. Для целей данного примера новый раздел жёсткого диска добавлен как /dev/ad4s1c, а /dev/ad0s1* представляет существующие стандартные разделы FreeBSD.
# ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4Создайте каталог для хранения файлов блокировок
gbde# mkdir /etc/gbdeФайл блокировки
gbdeсодержит информацию, необходимуюgbdeдля доступа к зашифрованным разделам. Без доступа к файлу блокировкиgbdeне сможет расшифровать данные, содержащиеся в зашифрованном разделе, без значительного ручного вмешательства, которое не поддерживается программным обеспечением. Каждый зашифрованный раздел использует отдельный файл блокировки.Инициализируйте раздел
gbdeРаздел gbde необходимо инициализировать перед использованием. Эта инициализация выполняется только один раз. Данная команда откроет редактор по умолчанию для настройки различных параметров конфигурации в шаблоне. Для использования с файловой системой UFS установите sector_size в значение 2048:
# gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock # # Sector size is the smallest unit of data which can be read or written. # Making it too small decreases performance and decreases available space. # Making it too large may prevent filesystems from working. 512 is the # minimum and always safe. For UFS, use the fragment size # sector_size = 2048 [...]После сохранения изменений пользователю будет предложено дважды ввести парольную фразу, используемую для защиты данных. Парольная фраза должна быть одинаковой в обоих случаях. Способность gbde защищать данные полностью зависит от качества парольной фразы. Советы по выбору безопасной парольной фразы, которую легко запомнить, можно найти по ссылке http://world.std.com/~reinhold/diceware.htm.
Такая инициализация создает файл блокировки для раздела gbde. В данном примере он сохраняется как /etc/gbde/ad4s1c.lock. Файлы блокировки должны иметь расширение ".lock", чтобы корректно определяться скриптом запуска /etc/rc.d/gbde.
Файлы блокировок обязательно должны быть включены в резервную копию вместе с содержимым зашифрованных разделов. Без файла блокировки законный владелец не сможет получить доступ к данным на зашифрованном разделе.
Присоедините зашифрованный раздел к ядру
# gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lockЭта команда запросит ввод парольной фразы, выбранной при инициализации зашифрованного раздела. Новое зашифрованное устройство появится в /dev под именем /dev/имя_устройства.bde:
# ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bdeСоздайте файловую систему на зашифрованном устройстве
После подключения зашифрованного устройства к ядру на нем можно создать файловую систему. В этом примере создается файловая система UFS с включенными мягкими обновлениями. Убедитесь, что указан раздел с расширением *.bde:
# newfs -U /dev/ad4s1c.bdeСмонтируйте зашифрованный раздел
Создайте точку монтирования и подключите зашифрованную файловую систему:
# mkdir /private # mount /dev/ad4s1c.bde /privateПроверьте, что зашифрованная файловая система доступна
Зашифрованная файловая система теперь должна быть видна и доступна для использования:
% df -H Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 1037M 72M 883M 8% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 8.1G 55K 7.5G 0% /home /dev/ad0s1e 1037M 1.1M 953M 0% /tmp /dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr /dev/ad4s1c.bde 150G 4.1K 138G 0% /private
После каждой загрузки все зашифрованные файловые системы должны быть вручную повторно подключены к ядру, проверены на ошибки и смонтированы, прежде чем их можно будет использовать. Чтобы настроить эти шаги, добавьте следующие строки в /etc/rc.conf:
gbde_autoattach_all="YES" gbde_devices="ad4s1c" gbde_lockdir="/etc/gbde"
Для этого необходимо ввести пароль на консоли во время загрузки. После ввода правильного пароля зашифрованный раздел будет автоматически подключен. Дополнительные параметры загрузки gbde доступны и перечислены в rc.conf(5).
|
20.12.2. Шифрование диска с помощью geli
Альтернативный криптографический класс GEOM доступен с использованием geli. Эта утилита управления предоставляет дополнительные возможности и использует другую схему для выполнения криптографических операций. Она обеспечивает следующие функции:
Использует фреймворк crypto(9) и автоматически задействует криптографическое оборудование, когда оно доступно.
Поддерживает несколько криптографических алгоритмов, таких как AES-XTS, AES-CBC и Camellia-CBCAES.
Позволяет зашифровать корневой раздел. Пароль для доступа к зашифрованному корневому разделу будет запрашиваться при загрузке системы.
Позволяет использование двух независимых ключей.
Она быстрая, так как выполняет простое поблочное шифрование.
Позволяет создавать резервные копии и восстанавливать мастер-ключи. Если пользователь уничтожит свои ключи, доступ к данным всё ещё можно получить, восстановив ключи из резервной копии.
Позволяет подключить диск с одноразовым случайным ключом, что полезно для разделов подкачки и временных файловых систем.
Дополнительные возможности и примеры использования приведены в geli(8).
Следующий пример описывает, как сгенерировать ключевой файл, который будет использоваться как часть мастер-ключа для зашифрованного провайдера, монтируемого в /private. Ключевой файл предоставит случайные данные, используемые для шифрования мастер-ключа. Мастер-ключ также будет защищён парольной фразой. Размер сектора провайдера составит 4 КБ. В примере описано, как подключиться к провайдеру geli, создать на нём файловую систему, смонтировать её, работать с ней и, наконец, отключить её.
geliЗагрузите поддержку
geliПоддержка
geliдоступна в виде загружаемого модуля ядра. Чтобы настроить систему для автоматической загрузки модуля при загрузке, добавьте следующую строку в файл /boot/loader.conf:geom_eli_load="YES"
Чтобы загрузуть модуля ядра сейчас:
# kldload geom_eliДля собственного ядра убедитесь, что файл конфигурации ядра содержит следующие строки:
options GEOM_ELI device crypto
Сгенеририруйте мастер-ключа
Следующие команды создают мастер-ключ, которым будут зашифрованы все данные. Этот ключ нельзя изменить. Вместо его прямого использования, он шифруется одним или несколькими пользовательскими ключами. Пользовательские ключи формируются из опциональной комбинации случайных байтов из файла /root/da2.key и/или парольной фразы. В данном случае источником данных для ключевого файла является /dev/random. Эта команда также устанавливает размер сектора провайдера (/dev/da2.eli) равным 4 КБ для улучшения производительности:
# dd if=/dev/random of=/root/da2.key bs=64 count=1 # geli init -K /root/da2.key -s 4096 /dev/da2 Enter new passphrase: Reenter new passphrase:Не обязательно использовать и парольную фразу, и файл ключа, так как каждый из этих методов защиты главного ключа может применяться отдельно.
Если файл ключа указан как "-", будет использован стандартный ввод. Например, следующая команда генерирует три файла ключей:
# cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2Присоедините поставщика с сгенерированным Ключом
Для подключения провайдера укажите файл ключа, имя диска и парольную фразу:
# geli attach -k /root/da2.key /dev/da2 Enter passphrase:Это создает новое устройство с расширением .eli:
# ls /dev/da2* /dev/da2 /dev/da2.eliСоздайте новую файловую систему
Далее отформатируйте устройство с файловой системой UFS и смонтируйте его в существующей точке монтирования:
# dd if=/dev/random of=/dev/da2.eli bs=1m # newfs /dev/da2.eli # mount /dev/da2.eli /privateЗашифрованная файловая система теперь должна быть доступна для использования:
# df -H Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 248M 89M 139M 38% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 7.7G 2.3G 4.9G 32% /usr /dev/ad0s1d 989M 1.5M 909M 0% /tmp /dev/ad0s1e 3.9G 1.3G 2.3G 35% /var /dev/da2.eli 150G 4.1K 138G 0% /private
После завершения работы с зашифрованным разделом и когда раздел /private больше не нужен, рекомендуется перевести устройство в холодное хранилище, размонтировав и отключив зашифрованный раздел geli от ядра:
# umount /private
# geli detach da2.eliДля упрощения монтирования зашифрованных устройств geli во время загрузки предоставляется скрипт rc.d. Для данного примера добавьте следующие строки в /etc/rc.conf:
geli_devices="da2" geli_da2_flags="-k /root/da2.key"
В этом примере /dev/da2 настраивается как провайдер geli с мастер-ключом /root/da2.key. Система автоматически отключит провайдер от ядра перед завершением работы. Во время загрузки скрипт запросит парольную фразу перед подключением провайдера. До или после запроса пароля могут отображаться другие сообщения ядра. Если процесс загрузки кажется зависшим, внимательно поищите запрос пароля среди других сообщений. После ввода правильной парольной фразы провайдер будет подключен. Файловая система затем монтируется, обычно с помощью записи в /etc/fstab. Инструкции по настройке автоматического монтирования файловой системы при загрузке можно найти в “Монтирование и размонтирование файловых систем”.
20.13. Шифрование раздела подкачки
Как и шифрование разделов диска, шифрование раздела подкачки используется для защиты конфиденциальной информации. Рассмотрим приложение, работающее с паролями. Пока пароли находятся в физической памяти, они не записываются на диск и будут удалены после перезагрузки. Однако если FreeBSD начнёт выгружать страницы памяти для освобождения места, пароли могут быть записаны на диск в незашифрованном виде. Решением в этом случае может быть шифрование раздела подкачки.
В этой части показано, как настроить зашифрованный раздел подкачки с использованием шифрования gbde(8) или geli(8). Предполагается, что раздел подкачки — это /dev/ada0s1b.
20.13.1. Настройка зашифрованного раздела подкачки
Разделы подкачки по умолчанию не шифруются, и перед продолжением работы следует удалить из них все конфиденциальные данные. Чтобы перезаписать текущий раздел подкачки случайными данными, выполните следующую команду:
# dd if=/dev/random of=/dev/ada0s1b bs=1mДля шифрования раздела подкачки с помощью gbde(8) добавьте суффикс .bde к строке подкачки в /etc/fstab:
# Device Mountpoint FStype Options Dump Pass# /dev/ada0s1b.bde none swap sw 0 0
Для шифрования раздела подкачки с помощью geli(8) используйте суффикс .eli:
# Device Mountpoint FStype Options Dump Pass# /dev/ada0s1b.eli none swap sw 0 0
По умолчанию geli(8) использует алгоритм AES с длиной ключа 128 бит. Обычно стандартных настроек достаточно. При необходимости эти значения по умолчанию можно изменить в поле options файла /etc/fstab. Доступные флаги:
- aalgo
Алгоритм проверки целостности данных, используемый для обеспечения отсутствия изменений в зашифрованных данных. Список поддерживаемых алгоритмов приведен в geli(8).
- ealgo
Алгоритм шифрования, используемый для защиты данных. Список поддерживаемых алгоритмов приведён в geli(8).
- keylen
Длина ключа, используемого для алгоритма шифрования. Подробнее о поддерживаемых длинах ключей для каждого алгоритма шифрования смотрите в geli(8).
- sectorsize
Размер блоков, на которые разбиваются данные перед шифрованием. Увеличение размера секторов повышает производительность за счет большего расхода пространства. Рекомендуемый размер — 4096 байт.
В этом примере настраивается зашифрованный раздел подкачки с использованием алгоритма AES-XTS с длиной ключа 128 бит и размером сектора 4 килобайта:
# Device Mountpoint FStype Options Dump Pass# /dev/ada0s1b.eli none swap sw,ealgo=AES-XTS,keylen=128,sectorsize=4096 0 0
20.13.2. Проверка зашифрованного раздела подкачки
После перезагрузки системы корректную работу зашифрованного раздела подкачки можно проверить с помощью swapinfo.
Если используется gbde(8):
% swapinfo
Device 1K-blocks Used Avail Capacity
/dev/ada0s1b.bde 542720 0 542720 0Если используется geli(8):
% swapinfo
Device 1K-blocks Used Avail Capacity
/dev/ada0s1b.eli 542720 0 542720 020.14. Высокодоступное хранилище (HAST)
Высокая доступность — одно из основных требований для серьёзных бизнес-приложений, а высокодоступное хранилище является ключевым компонентом в таких средах. В FreeBSD framework Highly Available STorage (HAST) обеспечивает прозрачное хранение одних и тех же данных на нескольких физически разделённых машинах, соединённых через сеть TCP/IP. HAST можно рассматривать как сетевой RAID1 (зеркало), аналогичный системе хранения DRBD®, используемой на платформе GNU/Linux®. В сочетании с другими функциями высокой доступности FreeBSD, такими как CARP, HAST позволяет создавать высокодоступные кластеры хранения, устойчивые к аппаратным сбоям.
Основные возможности HAST:
Может использоваться для маскировки ошибок ввода-вывода на локальных жестких дисках.
Файлово-системно агностичен, так как работает с любой файловой системой, поддерживаемой FreeBSD.
Эффективная и быстрая повторная синхронизация, так как синхронизируются только блоки, изменённые во время простоя узла.
Может использоваться в уже развернутой среде для добавления дополнительной избыточности.
Вместе с CARP, Heartbeat или другими инструментами он может использоваться для создания надежной и отказоустойчивой системы хранения данных.
Прочитав этот раздел, вы узнаете:
Что такое HAST, как он работает и какие возможности предоставляет.
Как настроить и использовать HAST в FreeBSD.
Как интегрировать CARP и devd(8) для создания надежной системы хранения данных.
Прежде чем читать этот раздел, вы должны:
Понимать основы UNIX® и FreeBSD (Основы FreeBSD).
Знать, как настраивать сетевые интерфейсы и другие основные подсистемы FreeBSD (Настройка и оптимизация).
Хорошо разбираться в сетевых возможностях FreeBSD (Сетевое взаимодействие).
Проект HAST был поддержан The FreeBSD Foundation при участии http://www.omc.net/ и http://www.transip.nl/.
20.14.1. Работа HAST
HAST обеспечивает синхронную репликацию на блочном уровне между двумя физическими машинами: primary (основной) узел и secondary (вторичный) узел. Вместе эти две машины называются кластером.
Поскольку HAST работает в конфигурации "основной-вторичный", он позволяет только одному узлу кластера быть активным в любой момент времени. Основной узел, также называемый активным, обрабатывает все запросы ввода-вывода для устройств, управляемых HAST. Вторичный узел автоматически синхронизируется с основным.
Физические компоненты системы HAST включают локальный диск на основном узле и диск на удаленном, резервном узле.
HAST работает синхронно на блочном уровне, что делает его прозрачным для файловых систем и приложений. HAST предоставляет обычные GEOM-провайдеры в /dev/hast/ для использования другими инструментами или приложениями. Нет разницы между использованием устройств, предоставляемых HAST, и использованием обычных дисков или разделов.
Каждая операция записи, удаления или сброса данных отправляется как на локальный диск, так и на удалённый диск через TCP/IP. Каждая операция чтения выполняется с локального диска, если только локальный диск не содержит актуальных данных или не возникает ошибка ввода-вывода. В таких случаях операция чтения отправляется на вторичный узел.
HAST стремится обеспечить быстрое восстановление после сбоев. По этой причине важно сократить время синхронизации после отказа узла. Для быстрой синхронизации HAST использует битовую карту грязных экстентов на диске и синхронизирует только их в процессе обычной синхронизации, за исключением начальной синхронизации.
Существует множество способов обработки синхронизации. HAST реализует несколько режимов репликации для работы с различными методами синхронизации:
memsync: В этом режиме операция записи считается завершённой, когда локальная операция записи завершена и когда удалённый узел подтверждает получение данных, но до фактического сохранения данных. Данные на удалённом узле будут сохранены сразу после отправки подтверждения. Этот режим предназначен для уменьшения задержки, но при этом обеспечивает хорошую надёжность. Этот режим используется по умолчанию.
fullsync: В этом режиме операция записи считается завершённой, когда завершается как локальная, так и удалённая запись. Это самый безопасный и самый медленный режим репликации.
async: В этом режиме операция записи считается завершенной, как только завершается локальная запись. Это самый быстрый и самый опасный режим репликации. Он должен использоваться только при репликации на удаленный узел, где задержка слишком высока для других режимов.
20.14.2. Конфигурация HAST
Фреймворк HAST состоит из нескольких компонентов:
Демон hastd(8), который обеспечивает синхронизацию данных. При запуске этого демона он автоматически загружает модуль
geom_gate.ko.Служебная программа управления пользовательским пространством hastctl(8).
Файл конфигурации hast.conf(5). Этот файл должен существовать до запуска hastd.
Пользователи, которые предпочитают статически встраивать поддержку GEOM_GATE в ядро, должны добавить следующую строку в файл конфигурации собственного ядра, а затем пересобрать ядро, следуя инструкциям в Настройка ядра FreeBSD:
options GEOM_GATE
Следующий пример описывает настройку двух узлов в режиме первичный-вторичный с использованием HAST для репликации данных между ними. Узлы будут называться hasta с IP-адресом 172.16.0.1 и hastb с IP-адресом 172.16.0.2. Оба узла будут иметь выделенный жесткий диск /dev/ad6 одинакового размера для работы с HAST. Пул HAST, иногда называемый ресурсом или провайдером GEOM в /dev/hast/, будет называться test.
Настройка HAST выполняется с помощью файла /etc/hast.conf. Этот файл должен быть идентичным на обоих узлах. Простейшая конфигурация выглядит следующим образом:
resource test {
on hasta {
local /dev/ad6
remote 172.16.0.2
}
on hastb {
local /dev/ad6
remote 172.16.0.1
}
}Для более сложной настройки обратитесь к hast.conf(5).
Также можно использовать имена хостов в операторах |
После создания конфигурации на обоих узлах можно создать пул HAST. Выполните следующие команды на обоих узлах, чтобы разместить начальные метаданные на локальном диске и запустить hastd(8):
# hastctl create test
# service hastd onestartНевозможно использовать провайдеры GEOM с существующей файловой системой или преобразовать существующее хранилище в пул под управлением HAST. Эта процедура требует хранения некоторых метаданных на провайдере, и на существующем провайдере не будет достаточно необходимого пространства. |
Роль primary или secondary узла HAST выбирается администратором или программным обеспечением, таким как Heartbeat, с помощью hastctl(8). На основном узле hasta выполните следующую команду:
# hastctl role primary testВыполните эту команду на дополнительном узле, hastb:
# hastctl role secondary testПроверьте результат, выполнив hastctl на каждом узле:
# hastctl status testПроверьте строку status в выводе. Если там указано degraded, значит, с файлом конфигурации что-то не так. На каждом узле должно быть указано complete, что означает начало синхронизации между узлами. Синхронизация завершается, когда hastctl status сообщает о 0 байтах в dirty экстентах.
Следующий шаг — создать файловую систему на провайдере GEOM и смонтировать её. Это должно быть выполнено на узле primary. Создание файловой системы может занять несколько минут в зависимости от размера жёсткого диска. В этом примере создаётся файловая система UFS на /dev/hast/test:
# newfs -U /dev/hast/test
# mkdir /hast/test
# mount /dev/hast/test /hast/testПосле правильной настройки структуры HAST последним шагом является обеспечение автоматического запуска HAST во время загрузки системы. Добавьте следующую строку в /etc/rc.conf:
hastd_enable="YES"
20.14.2.1. Конфигурация отказоустойчивости
Цель данного примера — создать надежную систему хранения, устойчивую к отказу любого узла. Если основной узел выходит из строя, резервный узел готов взять на себя управление без перерывов, проверить и смонтировать файловую систему, продолжив работу без потери данных.
Для выполнения этой задачи используется Протокол избыточности общих адресов (CARP — Common Address Redundancy Protocol), который обеспечивает автоматическое переключение на резервный узел на IP-уровне. CARP позволяет нескольким узлам в одном сетевом сегменте совместно использовать один IP-адрес. Настройте CARP на обоих узлах кластера в соответствии с документацией, доступной в “Common Address Redundancy Protocol (CARP)”. В этом примере каждый узел будет иметь свой собственный управляющий IP-адрес и общий IP-адрес 172.16.0.254. Основной узел HAST в кластере должен быть основным узлом CARP.
Созданный в предыдущем разделе пул HAST теперь готов к экспорту на другие узлы в сети. Это можно осуществить, экспортировав его через NFS или Samba, используя общий IP-адрес 172.16.0.254. Единственная оставшаяся нерешенной проблема — это автоматический переход на резервный узел в случае отказа основного.
В случае перехода интерфейсов CARP в состояние "включен" или "выключен", операционная система FreeBSD генерирует событие devd(8), что позволяет отслеживать изменения состояния интерфейсов CARP. Изменение состояния интерфейса CARP указывает на то, что один из узлов вышел из строя или вернулся в онлайн. Эти события изменения состояния позволяют запускать скрипт для автоматической обработки переключения при отказе в HAST.
Для отслеживания изменений состояния на интерфейсах CARP добавьте следующую конфигурацию в /etc/devd.conf на каждом узле, заменив <vhid> на идентификатор виртуального хоста и <ifname> на имя соответствующего интерфейса:
notify 30 {
match "system" "CARP";
match "subsystem" "<vhid>@<ifname>";
match "type" "MASTER";
action "/usr/local/sbin/carp-hast-switch primary";
};
notify 30 {
match "system" "CARP";
match "subsystem" "<vhid>@<ifname>";
match "type" "BACKUP";
action "/usr/local/sbin/carp-hast-switch secondary";
};Перезапустите devd(8) на обоих узлах, чтобы новая конфигурация вступила в силу:
# service devd restartКогда состояние указанного интерфейса изменяется (переход вверх или вниз), система генерирует уведомление, позволяющее подсистеме devd(8) запустить указанный скрипт автоматического переключения /usr/local/sbin/carp-hast-switch. Для дополнительных пояснений о данной конфигурации обратитесь к devd.conf(5).
Вот пример скрипта автоматического переключения при отказе:
#!/bin/sh
# Original script by Freddie Cash <fjwcash@gmail.com>
# Modified by Michael W. Lucas <mwlucas@BlackHelicopters.org>
# and Viktor Petersson <vpetersson@wireload.net>
# The names of the HAST resources, as listed in /etc/hast.conf
resources="test"
# delay in mounting HAST resource after becoming primary
# make your best guess
delay=3
# logging
log="local0.debug"
name="carp-hast"
# end of user configurable stuff
case "$1" in
primary)
logger -p $log -t $name "Switching to primary provider for ${resources}."
sleep ${delay}
# Wait for any "hastd secondary" processes to stop
for disk in ${resources}; do
while $( pgrep -lf "hastd: ${disk} \(secondary\)" > /dev/null 2>&1 ); do
sleep 1
done
# Switch role for each disk
hastctl role primary ${disk}
if [ $? -ne 0 ]; then
logger -p $log -t $name "Unable to change role to primary for resource ${disk}."
exit 1
fi
done
# Wait for the /dev/hast/* devices to appear
for disk in ${resources}; do
for I in $( jot 60 ); do
[ -c "/dev/hast/${disk}" ] && break
sleep 0.5
done
if [ ! -c "/dev/hast/${disk}" ]; then
logger -p $log -t $name "GEOM provider /dev/hast/${disk} did not appear."
exit 1
fi
done
logger -p $log -t $name "Role for HAST resources ${resources} switched to primary."
logger -p $log -t $name "Mounting disks."
for disk in ${resources}; do
mkdir -p /hast/${disk}
fsck -p -y -t ufs /dev/hast/${disk}
mount /dev/hast/${disk} /hast/${disk}
done
;;
secondary)
logger -p $log -t $name "Switching to secondary provider for ${resources}."
# Switch roles for the HAST resources
for disk in ${resources}; do
if ! mount | grep -q "^/dev/hast/${disk} on "
then
else
umount -f /hast/${disk}
fi
sleep $delay
hastctl role secondary ${disk} 2>&1
if [ $? -ne 0 ]; then
logger -p $log -t $name "Unable to switch role to secondary for resource ${disk}."
exit 1
fi
logger -p $log -t $name "Role switched to secondary for resource ${disk}."
done
;;
esacВ двух словах, скрипт выполняет следующие действия, когда узел становится основным:
Переводит пул HAST в primary на другом узле.
Проверяет файловую систему в пуле HAST.
Подключает пул.
Когда узел становится вторичным:
Размонтирует пул HAST.
Переводит пул HAST в состояние secondary.
Это просто пример скрипта, который служит доказательством концепции. Он не обрабатывает все возможные сценарии и может быть расширен или изменён любым способом, например, для запуска или остановки необходимых служб. |
Для этого примера использовалась стандартная файловая система UFS. Чтобы сократить время, необходимое для восстановления, можно использовать журналируемую UFS или файловую систему ZFS. |
Вместо использования высокодоступного хранилища локально, его также можно предоставить в общее пользование другим компьютерам в сети через NFS, iSCSI, sshfs(1) или программы из портов (например, net/samba419).
Более подробная информация с дополнительными примерами доступна по адресу http://wiki.FreeBSD.org/HAST.
20.14.3. Устранение неполадок
HAST, как правило, должен работать без проблем. Однако, как и с любым другим программным продуктом, могут возникнуть ситуации, когда он работает не так, как предполагается. Источники проблем могут быть разными, но главное правило — обеспечить синхронизацию времени между узлами кластера.
При устранении неполадок HAST уровень отладки hastd(8) следует повысить, запустив hastd с параметром -d. Этот аргумент можно указать несколько раз для дальнейшего повышения уровня отладки. Также рекомендуется использовать -F, что запускает hastd в foreground.
20.14.3.1. Восстановление после раскола кластера
Раскол (split-brain) возникает, когда узлы кластера не могут связаться друг с другом, и оба настроены как первичные. Это опасная ситуация, так как она позволяет обоим узлам вносить противоречивые изменения в данные. Данная проблема должна быть устранена вручную системным администратором.
Администратор должен либо определить, на каком узле находятся более важные изменения, либо выполнить слияние вручную. Затем следует позволить HAST выполнить полную синхронизацию узла с повреждёнными данными. Для этого выполните следующие команды на узле, который требует повторной синхронизации:
# hastctl role init test
# hastctl create test
# hastctl role secondary testИзменено: 20 октября 2025 г. by Vladlen Popolitov