Delete26 — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(Новая страница: «= Файловая система ZFS = ZFS пришла в мир Linux из операционной системы Solaris. Её возможности вых…»)
 
(Полностью удалено содержимое страницы)
Строка 1: Строка 1:
= Файловая система ZFS =
 
  
ZFS пришла в мир Linux из операционной системы Solaris. Её возможности выходят за рамки рядовых файловых систем (''ФС'') и
 
подробно рассмотрены в документе [[https://docs.oracle.com/cd/E19253-01/820-0836/820-0836.pdf Руководство по администрированию файловых систем ZFS Solaris]].
 
 
Предлагаемый текст призван осветить ключевые аспекты и заложить основы для понимания того, какие удобства способен получить от ZFS пользователь.
 
 
== zpool ==
 
 
Если традиционно ФС создают на ''разделах'' носителей информации, то ZFS реализует концепцию ''хранилища'' (англ. ''pool''), способного объединить в себе произвольное количество как физических накопителей, так и их логических разделов. При этом многие технические вопросы ZFS берёт на себя, позволяя создать зеркальный массив из двух накопителей одной командой:
 
# zpool create pool mirror sdb sdc
 
Когда дублирование информации пользователя не требуется, накопители можно объединить, сложив их ёмкость и увеличив скорость доступа:
 
# zpool create pool sdb sdc
 
В вышеприведённых примерах {{File|pool}} — произвольное имя хранилища.
 
{{File|sdb}} и {{File|sdc}} — сокращения от имен устройств {{File|/dev/sdb}} и {{File|/dev/sdc}}.
 
Заметим, что в таком случае на каждом устройстве будут созданы GPT разметка и разделы:
 
Устр-во          Start  Конец Size Тип
 
/dev/sdc1        2048    31487999  15G Solaris /usr & Apple ZFS
 
/dev/sdc9    31488000    31504383  8M Solaris reserved 1
 
 
Можно передавать команде {{Cmd|zpool create}} и имена существующих разделов, а так же файлов.
 
 
Если хранилище создано на переносном накопителе, для безопасного отключения служит команда:
 
# zpool export pool
 
а для подключения:
 
# zpool import pool
 
 
Когда имя хранилища не известно, команда импорта выполняется без его указания и выводит список возможных.
 
 
Логика работы ZFS такова, что извлечение физического накопителя без предварительного экспортирования не должно приводить к повреждению информации на нём. В крайнем случае возможна потеря только тех данных пользователя, которые ОС не успела записать. Например, при изменении текстового документа может случиться, что на «флешке» окажется прежняя, не изменённая версия. Но ситуация, когда в результате аварийного прерывания записи существующие данные оказались потеряны (ошибочно затёрты) — исключена. Для обеспечения этого ZFS использует метаданные, в частности контрольные суммы.
 
 
Запуск задачи очистки возможных ошибок метаданных производится командой:
 
# zpool scrub pool
 
а проверка состояния:
 
# zpool status
 
Произведённые операции сохраняются в журнале, для просмотра которого служит
 
# zpool history
 
 
== zfs ==
 
 
Создав вышеизложенным способом хранилище, можно обнаружить, что в коневом разделе смонтирован каталог с соответствующим именем. На самом деле, ему соответствует одноимённая файловая система, в чём можно убедиться, дав команду:
 
# zfs list
 
В таком виде уже возможно использовать ZFS — как обычную ФС. Если желательно монтировать традиционной командой {{cmd|mount}} и {{File|/etc/fstab}} то следует изменить соответствующее ''свойство'' таким образом:
 
# zfs set mountpoint=legacy pool
 
 
Для просмотра свойств предназначен вариант {{Cmd|get}}, например, их перечень можно получить так:
 
# zfs get all
 
Ряд свойств должен быть знаком тем, кто редактировал файл {{File|/etc/fstab}}. ZFS хранит их поближе к характеризуемым структурам, что бы «инструкция по использованию» была под рукой. Но это не мешает использовать и привычный подход.
 
 
=== Зачем нужна zfs, когда есть zpool? ===
 
 
Как правило, предпочтительно отделять данные пользователя в {{File|/home}} от системных. Возможны и более сложные иерархии.
 
ZFS позволяет не тратить время на вопрос «какие лучше выбрать размеры разделам?» — всё умещается в хранилище хорошо и так, а со сжатием LZ4 логический объём может превысить физический, грубо говоря, вдвое.
 
 
В таких сценариях автоматически создаваемая ФС не используется непосредственно для хранения данных. Её рассматривают как родительскую: задают свойства, которые требуется унаследовать дочерним структурам, например:
 
# zfs set compression=lz4 pool
 
# zfs set acltype=posixacl pool
 
# zfs set xattr=xa pool
 
'''
 
# zfs create pool/ROOT
 
# zfs create pool/ROOT/rosa-1
 
# zfs create -o mountpoint=/home pool/home
 
 
Как видно, свойства можно задавать непосредственно при создании ФС, а не только менять позже. Отличная от {{File|legacy}} точка монтирования {{File|/home}} приведёт к тому, что {{File|pool/home}} окажется доступен по соответствующему пути в случае импорта, или команды {{Cmd|zfs mount -a}}. Однако, нужно учитывать тонкость: свойство {{File|overlay}} по умолчанию {{File|off}} — если что-либо по заданному пути уже смонтировано, то оверлей создан не будет.
 
 
Помимо {{File|pool/ROOT/rosa-1}} можно создать {{File|pool/ROOT/rosa-2}} и установить два варианта ОС, например, скопировав содержимое одной ФС во вторую, или используя специальное средство — {{Cmd|zfs clone}}. С учётом таких сценариев, а так же возможности {{Cmd|chroot}}, вместо {{File|mountpoint=/}} удобнее выбрать {{File|legacy}} (и если читатель выполнил пример из предыдущего раздела, то оно таким и унаследовано от {{Filez|pool}})
 
 
== Запуск ОС Роса с ZFS ==
 
 
Осуществляется всего, если на диске создан отдельный раздел {{File|/boot}} для {{Prog|grub2}} и ядер ОС. В таком случае в {{File|grub.cfg}} в качестве параметра ядра {{File|root}} следует указать путь к корневому разделу, возможны различные варианты:
 
linux /vmlinuz-4.4.7-nrj-laptop-1rosa-x86_64 root=ZFS=pool/ROOT/rosa-1 ro
 
 
linux /vmlinuz-4.4.7-nrj-laptop-1rosa-x86_64 root=zfs: ro  zfs=pool/ROOT/rosa-1
 
 
С этой задачей справляется {{Cmd|update-grub2}} из официальных репозиториев, но в некоторых случаях требуется недавняя beta версия.
 
Так же желательно установить и соответствующее свойство:
 
# zpool set bootfs=pool/ROOT/rosa-1
 

Версия 14:32, 21 апреля 2016