Это старая версия документа.
Содержание
Использование btrfs
Описание
Основные возможности btrfs:
- Проверка целостности без размонтирования;
- Записываемые снимки (writeable snapshots);
- Динамическое выделение индексных дескрипторов (динамические иноды, dynamic inodes);
- Контрольные суммы данных и метаданных;
- Интеграция с device-mapper;
- Поддержка RAID-массивов (одна файловая система на нескольких томах);
- Сжатие;
- Подтома (subvolumes);
- Эффективное клонирование файловой системы и создание инкрементальных архивов;
- Дефрагментация смонтированной файловой системы.
- Поддержка сложных многодисковых конфигураций — RAID уровней 0, 1, 5, 6 и 10, а также реализация различных политик избыточности на уровне объектов ФС — то есть возможно назначить, к примеру, зеркалирование для какого-либо каталога или файла.
- Copy-on-write (CoW) журналирование.
- Контроль целостности блоков данных и метаданных с помощью контрольных сумм.
- Зеркалирование метаданных даже в однодисковой конфигурации.
- Полностью распределенное блокирование.
- Поддержка ACL.
- Защита от потери данных.
- Выбор хэш-алгоритма.
- Поддержка NFS.
- Флаги совместимости, необходимые для изменения дискового формата в новых версиях btrfs с сохранением совместимости со старыми.
- Резервные копии суперблока, по крайней мере — по одной на устройство.
- Скоростные приоритеты для дисков.
- Гибридные пулы. btrfs старается перемещать наиболее используемые данные на самое быстрое устройство, вытесняя с него «залежавшиеся» блоки. Эта политика хорошо согласуется с появившейся недавно моделью использования SSD (Solid State Drive).
- Балансировка данных между устройствами в btrfs возможна сразу после добавления диска к пулу, отдельной командой — а не только постепенно, в процессе использования (как это реализовано в ZFS).
- Диски для горячей замены, поддержка которых появилась и в ZFS.
Немного слов от себя, я выбрал её так как ей уже большe 3-х лет и большая часть информации уже устарела(о проблемах и о том что она медленная), в придачу она обладает прозрачным сжатием которое дает хороший прирост к скорости чтения и записи вот Benchmarking. Конечно уточню то что все плюсы её именно в дополнительных параметрах монтирования (и снапшотах, которые при умелом использовании спасают систему) и что на default настройках она уступает ext4
Из ext* в btrfs
Btrfs содержит очень мало метаданных, которые имеют фиксированное положение, что делает относительно лёгкой разработку утилит преобразования в неё из других файловых систем. Алгоритмы Copy on write позволяют Btrfs сохранять неизмененную копию исходной файловой системы, а администратору позволяют отменить преобразование, даже после выполнения изменений в итоговой файловой системе Btrfs.
Программа преобразования использует libe2fs для чтения метаданных Ext3, и использует свободные блоки в ней для помещения в них новую файловую систему Btrfs. Основной алгоритм преобразования работает так:
дублирует первый 1 Мбайт устройства; дублирует каталоги и inodes, создавая их копии в Btrfs; делает ссылки на блоки данных файла Ext3 в файлах Btrfs. Таким образом создаются копии всех метаданных Ext3, но файлы Btrfs являются просто указателями на те же самые блоки, которые заняты файлами Ext3. Это разделяет большую часть блоков между этими двумя файловыми системами. Поскольку Btrfs использует Copy on write для всех модификаций файла, оригинальная версия блоков данных файла Ext3 сохраняется.
Первый 1 МБ устройства копируется в альтернативную область для того, чтобы в него могли быть записаны метаданные Btrfs. Отмена преобразования заключается просто в восстановлении этих блоков.
Результат преобразования выглядит примерно так:
Конверсионная программа создает в Btrfs снапшот со ссылками на все блоки, используемые Ext3, позволяя администратору определять время, в течение которого будет сохраняться оригинальная файловая система Ext3. Если администратор захочет освободить место, занимаемое реликтами Ext3, снапошот можно удалить, после чего преобразование станет необратимым.
Пока снапшот не удален, для хранения новых модификаций Btrfs могут использоваться только те блоки, которые были помечены в Ext3 как свободные. Это означает, что преобразование может быть отменено когда угодно в любое время, с восстановлением исходной файловой системы Ext3. Конвертер создает отдельный файл, содержащий все ссылки на исходную файловую систему Ext3, и смещения в этом файле соответствуют смещениям на блочном устройстве. Это позволяет администратору монтировать этот файл как loopback-устройство в режиме read only и видеть исходную файловую систему Ext3 и преобразованную файловую систему Btrfs одновременно. (Если раздел не системный, если системный то грузимся с LiveCD и это будет описано ниже). ххх заменить на необходимый раздел Пример использования:
# Сначала запустить fsck
fsck.ext3 -f /dev/xxx
# Преобразование из Ext3 в Btrfs
btrfs-convert /dev/xxx
# Монтирование новообразованной файловой системы Btrfs
mount -t btrfs /dev/xxx /btrfs
# Монтирование снапшота ext3
mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved
# Монтирование файла образа как loopback-устройства
mount -t ext3 -o loop,ro /ext2_saved/image /ext3
В приведённом выше примере файлы в /ext3 и в /btrfs будут идентичны. Любые модификации, выполненные в /btrfs, не будут видны в /ext3. Обратное преобразование делается так:
# Полное отмонтирование файловой системы Btrfs
unmount /ext3
unmount /ext2_saved
unmount /btrfs
# Обратное преобразование
btrfs-convert -r /dev/xxx
# Монтирование исходной файловой системы
mount -t ext3 /dev/xxx /ext3
Если вы хотите освободить место, занятое исходной файловой системой Ext3 и сделать преобразование постоянным, просто удалите файл /ext2_saved/image.
После удаления файла образа диск будет выглядеть примерно так →
Инструкция преобразование ext4 в btrfs
Делаем аналогично, я буду вести вас за руку, делаю на примере моего опыта преобразования раздела /home и прикручивания его на месте. Общий план действий, мы установили ubuntu 12.10, корень изначально отформатирован в btrfs, вот fstab:
# <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda3 during installation UUID=d094dfa1-3114-41d0-86da-5e3d91a75a35 / btrfs defaults,subvol=@ 0 1 #корень / # # /boot was on /dev/sda2 during installation UUID=d9e3ccbf-9281-4322-ab39-f3b590b41c1a /boot ext4 defaults 0 2 #раздел /boot обязательно отдельно и не btrfs # # /boot/efi was on /dev/sda1 during installation UUID=EECD-EEE1 /boot/efi vfat defaults 0 1 #Efi потому что - [[wiki:установка_дистрибутива_на_компьютер_с_efi|Установка дистрибутива на компьютер с efi]] # # /home was on /dev/sda5 during installation UUID=34a5d56c-f6b3-46bb-b5f6-8b6cc15e4da3 /home ext4 defaults 0 2 # # swap was on /dev/sda4 during installation UUID=eec9a7be-672b-4720-acef-70f5bd6df0c4 none swap sw 0 0
Вот отличненько, первое это приводим в порядок корневой раздел, переделываем его вот в это(инфа о параметрах тут):
# / was on /dev/sda3 during installation UUID=d094dfa1-3114-41d0-86da-5e3d91a75a35 / btrfs defaults,subvol=@,compress-force=lzo,autodefrag,space_cache 0 1
Перезагружаем, смотрим что вышло. Запустилась? отлично, значит всё хорошо. Загружаемся с любого LiveCD образа. Инструкция составлена для преобразования раздела /home при схеме разметки как выше, в вашем случае может понадобиться изменить имена разделов
Сначала запустить fsck #Проверим диск на наличие ошибок
fsck.ext4 -f /dev/sda5 #ext4 т.к. раздел home выше отформатирован в её.
#Преобразование из Ext* в Btrfs
btrfs-convert /dev/sda5 #Он долго и упорно будет сканировать метадаты, у меня процесс конвертации длился больше получаса (300GB/500GB).
#Не трогаем не выдергиваем ждём завершения.
#Новоиспеченную btrfs можно смонтировать через наутилус и проверить наличие папок ext2_saved и папку пользователя(вашу)
#Узнаем новый адресс раздела с home
sudo blkid
#ищем строку с нашим разделом, вот и она:
/dev/sda5: UUID="baa5d56c-f6b3-46bb-b5f6-8b6cc15e4da3" UUID_SUB="eaebe91a-5797-44d9-bc74-312316e7dbe6" TYPE="btrfs"
Теперь надо исправить неправильный адрес home в fstab. Открываем наутилус, примонтируем раздел с корнем.
sudo gedit
открываем корень, затем run → media → ищем среди подключенных дисков корневой раздел, открываем там будет папка «@», переходим etc → fstab
Отлично, находим строку с нашим разделом home:
#/home was on /dev/sda5 during installation UUID=34a5d56c-f6b3-46bb-b5f6-8b6cc15e4da3 /home ext4 defaults 0 2
Теперь правим его, по аналогии с корнем, заменяем старый UUID «34a5d56c-f6b3-46bb-b5f6-8b6cc15e4da3», на новый «baa5d56c-f6b3-46bb-b5f6-8b6cc15e4da3», прописываем параметры, получаем(не забудьте исправить ext4 на btrfs):
#/home was on /dev/sda5 during installation UUID=baa5d56c-f6b3-46bb-b5f6-8b6cc15e4da3 /home btrfs defaults,compress-force=lzo,autodefrag,space_cache 0 2
Перезагружаемая, если всё сделано правильно, оно загрузиться. В крайнем случае [который не должен наступить] по вышестоящей инструкции можно вернуть ext* на место.
Дополнительные команды
информация о ФС
для пути:
btrfs filesystem df /home #выполняются отдельно для каждого раздела, т.е. если просмотреть корень, он покажет совершенно другое
Покажет информацию о /home
вывод:
timofey@Timofey-Lenovo-B570:~$ btrfs filesystem df /home Data: total=272.64GB, used=146.61GB System: total=32.00MB, used=28.00KB Metadata: total=136.00GB, used=71.46GB
balance
Как мы видим метаданные занимают большой объём, исправим это:
sudo btrfs fi balance /home #ждём, процесс долог и не обратим
Когда закончиться, вбиваем и сравниваем:
timofey@Timofey-Lenovo-B570:~$ btrfs filesystem df /home Data: total=251.00GB, used=200.30GB System: total=32.00MB, used=32.00KB Metadata: total=24.00GB, used=17.75GB
snapshot
создание
Ситуация простая, обновляюсь до следующего дистра 12.10, хочу иметь возможность легко откатиться, как это сделать? Правильно, организовать снапшот фс. Поскольку обновлять будем только рут, то и снимок будем делать только его. Для начала нужно подмонтировать раздел с рутом куданибудь. У меня на этот случай в /mnt создана спец папка tmpfs, если у вас такого нет, то делаем следующим образом(всё указываю относительно имени tmpfs)
sudo su mkdir /mnt/tmpfs
Затем подмонтируем раздел с корнем в созданную нами папку.
mount /dev/sda3/ /mnt/tmpfs/ #sd* зависит от того куда и как вы ставили систему, если всё так как выше в статье, этот способ подойдёт.
теперь самое интересное делаем снимок: #первый путь, путь к папке исходнику, второй к папке в которой сохранится снимок.
btrfs subvolume snapshot /mnt/tmpfs/@/ /mnt/tmpfs/oldroot/ #Собака потому что используются саб разделы.
После завершения появится надпись:
Create a snapshot of '/mnt/tmpfs/@/' in '/mnt/tmpfs/oldroot'
Теперь лезем в mnt и любуемся результатом.
удаление
Снапшоты удалять как файлы не комильфо (Не удаляться «Правильно») Удалим старый снимок:
btrfs subvolume delete '/mnt/tmpfs/oldroot'
получим сообщение:
Delete subvolume '/mnt/tmpfs/oldroot' #Ждём завершения
Возможные проблемы
btrfs хороша но не идеальна, файлы она у меня до сих пор не съела (и вообще нужно с ней держаться более новых ядер, так как там обычно есть новые заплатки) Например после под монтирования с livedvd раздела с /home и правки директорий, у меня при загрузке ubuntu выбивается ошибка и нужно нажать i чтобы подключить без проверки, не смертельно но мешает, решение довольно радикальное - открываем fstab:
sudo gedit /etc/fstab
видим:
# <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc nodev,noexec,nosuid 0 0 # / was on /dev/sda3 during installation UUID=98463b8f-048a-4693-aad7-7d6db40dea51 / btrfs defaults,subvol=@,compress-force=lzo,space_cache,inode_cache 0 1 #1 меняем её на 0. # /boot was on /dev/sda2 during installation UUID=a186246f-c972-4cfc-ae99-a881776b4303 /boot ext4 defaults 0 2 # /boot/efi was on /dev/sda1 during installation UUID=4AE0-FDEE /boot/efi vfat defaults 0 1 # /home was on /dev/sda5 during installation UUID=baa5d56c-f6b3-46bb-b5f6-8b6cc15e4da3 /home btrfs defaults,subvol=@home,compress-force=lzo,space_cache,inode_cache 0 2 #2 меняем тоже на 0. # swap was on /dev/sda4 during installation UUID=eec9a7be-672b-4720-acef-70f5bd6df0c4 none swap sw 0 0
для справки, это не рекомендуемое действие т.к. потенциально отключает поиск ошибок в фс, что может вылиться в потерю данных, потому делаете всё на свой страх и риск. (Точно, забыл сказать: «Это несколько ускоряет загрузку»)
В 3.5 ядре, т.е. на 12.10 btrfs научилась править ошибки(вроде) и если у вас система при загрузке пишет «Ошибка при монтировании *** нажмите s чтобы пропустить» значит что-то нахимичили с параметрами.
статья требует исправления, поправок и дополнения, если вы можете чем либо помочь «Прошу к столу»
Обсуждение, вопросы и прочие тут: btrfs
— nefelim4ag 2012/09/07 22:42 Вообще обращайтесь если будут вопросы, по возможности помогу с этой фс nefelim4ag@gmail.com
