Ext-btrfs Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:ext_to_btrfs [2016/03/02 23:59]
Sly_tom_catSly_tom_catSly_tom_catXubuntu 18.04 (64bit)Don't worry, be happy! [Из ext* в btrfs]
wiki:ext_to_btrfs [2016/11/09 13:25] (текущий)
Sly_tom_catSly_tom_catSly_tom_catXubuntu 18.04 (64bit)Don't worry, be happy!
Строка 1: Строка 1:
 ====== Ext-btrfs ====== ====== Ext-btrfs ======
-======Глоссарий====== 
-chunk - кусок файловой системы,​ btrfs размечает не диск, а chunk'​и внутри раздела. 
-leaf - леана, ветка метаданных,​ inode, в её пишутся метаданные описывающие содержание chunk'​ов и мелкие файлы. 
-лист - кусок чанка или сам чанк, туда пишутся данные. 
  
 =====Из ext* в btrfs===== =====Из ext* в btrfs=====
-<​note>​ +[[wiki:​btrfs|Btrfs]] содержит очень мало метаданных,​ которые имеют фиксированное положение,​ что делает относительно лёгкой разработку утилит преобразования в неё из других файловых систем. Алгоритм Copy on write позволяют btrfs сохранять неизмененную копию исходной файловой системы,​ а администратору позволяют отменить преобразование,​ даже после выполнения изменений в итоговой файловой системе btrfs (откат происходит без учета изменений в btrfs, т.е. к тому моменту когда было запущено преобразование).
-Эта статья помечена как незаконченная. +
-</​note>​ +
-Btrfs содержит очень мало метаданных,​ которые имеют фиксированное положение,​ что делает относительно лёгкой разработку утилит преобразования в неё из других файловых систем. Алгоритм Copy on write позволяют btrfs сохранять неизмененную копию исходной файловой системы,​ а администратору позволяют отменить преобразование,​ даже после выполнения изменений в итоговой файловой системе btrfs (откат происходит без учета изменений в btrfs, т.е. к тому моменту когда было запущено преобразование).+
  
 Программа преобразования btrfs-convert использует libe2fs для чтения метаданных ext2-3-4 (далее для простоты ext*), и использует свободные блоки файловой системы для помещения в них метаданных новой файловой системы btrfs. Алгоритм преобразования работает так: Программа преобразования btrfs-convert использует libe2fs для чтения метаданных ext2-3-4 (далее для простоты ext*), и использует свободные блоки файловой системы для помещения в них метаданных новой файловой системы btrfs. Алгоритм преобразования работает так:
  
- - дублируется первый 1 Мбайт устройства на свободное место;​ +  ​- дублируется первый 1 Мбайт устройства на свободное место;​ 
- - создает копии каталогов и inodes в структуре метаданных btrfs (также в свободных областях старой файловой системы);​ +  - создает копии каталогов и inodes в структуре метаданных btrfs (также в свободных областях старой файловой системы);​ 
- - в новых inode создаются ссылки на блоки данных файлов ext*.+  - в новых inode создаются ссылки на блоки данных файлов ext*.
 Таким образом создается новая структура метаданных btrfs, которая дублирует метаданные ext*, но данные файлов не дублируются на них ссылаются обе структуры метаданных. Это разделяет большую часть блоков между этими двумя файловыми системами. Поскольку btrfs использует Copy on write для всех модификаций файлов,​ оригинальная версии блоков данных файлов ext* сохраняются без изменений. Таким образом создается новая структура метаданных btrfs, которая дублирует метаданные ext*, но данные файлов не дублируются на них ссылаются обе структуры метаданных. Это разделяет большую часть блоков между этими двумя файловыми системами. Поскольку btrfs использует Copy on write для всех модификаций файлов,​ оригинальная версии блоков данных файлов ext* сохраняются без изменений.
  
Строка 28: Строка 21:
 Пока снапшот ext* не удален,​ для хранения новых и сохранения модифицированных файлов/​каталогов btrfs использует только те блоки, которые были помечены в ext* как свободные. Это означает,​ что преобразование может быть отменено когда угодно в любое время, с восстановлением исходной файловой системы ext*. Конвертер создает отдельный файл, содержащий все ссылки на исходную файловую систему ext*, и смещения в этом файле соответствуют смещениям на блочном устройстве. Это позволяет монтировать этот файл как loopback-устройство в режиме read only и видеть исходную файловую систему ext* одновременно с работой в файловой системой btrfs. Пока снапшот ext* не удален,​ для хранения новых и сохранения модифицированных файлов/​каталогов btrfs использует только те блоки, которые были помечены в ext* как свободные. Это означает,​ что преобразование может быть отменено когда угодно в любое время, с восстановлением исходной файловой системы ext*. Конвертер создает отдельный файл, содержащий все ссылки на исходную файловую систему ext*, и смещения в этом файле соответствуют смещениям на блочном устройстве. Это позволяет монтировать этот файл как loopback-устройство в режиме read only и видеть исходную файловую систему ext* одновременно с работой в файловой системой btrfs.
  
 +<note important>​Обратите внимание:​ при конвертировании для размещения файлов из старой ext* системы используется корневой подтом (о подтомах можно узнать в статье про [[wiki:​btrfs|Btrfs]]). Тогда как инсталятор обычно размещает корень в подтоме @ и домашний каталог /home в подтоме @home.</​note>​
  
-=====Пример конвертирования ​ext3=====  + 
-<note important>​В примере предполагается,​ что вы работаете с несмонтированным разделом,​ если нужно преобразовать корневую файловую систему,​ то загрузитесь с LiveCd/USB для выполнения этих действий.</​note>​ +=====Пример конвертирования ​ext*=====  
-<note important>/​dev/​sdX в командах нужно заменить на реальное имя устройства с которым вы выполняете операции):+В примере предполагается,​ что вы работаете с несмонтированным разделом,​ если нужно преобразовать корневую файловую систему,​ то загрузитесь с LiveCd/USB для выполнения этих действий. ​В примере мы преобразуем ext4 в btrfs, преобразование ext2 и ext3 ничем принципиально не отличается. 
 +<note important>/​dev/​sdX в командах нужно заменить на реальное имя устройства с которым вы выполняете операции.
 </​note>​ </​note>​
-# Сначала проверьте целостность файловой системы ​ext3\\ +  ​# Сначала проверьте целостность файловой системы ​ext4 
-fsck.ext3 -f /dev/sdX\\+  fsck.ext4 -f /dev/sdX
  
-# Преобразование ​ext3 в btrfs\\ +  ​# Преобразование ​ext4 в btrfs 
-btrfs-convert /dev/sdX\\+  btrfs-convert /dev/sdX
  
-# Монтирование новообразованной файловой системы btrfs\\ +  ​# Монтирование новой файловой системы btrfs 
-mount -t btrfs /dev/sdX /btrfs\\+  mount -t btrfs /dev/sdX /btrfs
  
-# Монтирование снапшота ​ext3\\ +  ​# Монтирование снапшота ​ext4 
-mount -t btrfs -o subvol=ext2_saved /dev/sdX /ext2_saved\\+  mount -t btrfs -o subvol=ext2_saved /dev/sdX /ext2_saved
  
-# Монтирование файла образа как loopback-устройства\\ +  ​# Монтирование файла образа как loopback-устройства 
-mount -t ext3 -o loop,ro /​ext2_saved/​image /ext3\\ +  mount -t ext4 -o loop,ro /​ext2_saved/​image /ext3\\
-{{ :​wiki:​converter-post.png|}} В приведённом выше примере файлы в /ext3 и в /btrfs будут идентичны. Любые модификации,​ выполненные в /btrfs, не будут видны в /ext3. Обратное преобразование делается так:+
  
-# Полное ​отмонтирование ​файловой системы btrfs\\  +{{ :​wiki:​converter-post.png|}} В приведённом выше примере файлы в /ext4 и в /btrfs будут идентичны. Любые ​модификации,​ выполненные в /btrfs, не будут видны в /ext4. Обратное преобразование ​делается так:
-unmount /ext3\\ +
-unmount /​ext2_saved\\ +
-unmount /btrfs\\+
  
-# Обратное преобразование\\  +  ​# Отмонтируем все элементы файловой системы смонтированные ранее 
-btrfs-convert -r /dev/sdX\\+  ​unmount ​/ext4 
 +  unmount ​/ext2_saved 
 +  unmount /btrfs
  
-Монтирование исходной файловой системы\\ +  ​Обратное преобразование  
-mount -t ext3 /​dev/​sdX ​/ext3\\+  btrfs-convert -r /dev/sdX
  
-Если вы хотите освободить место, занятое снимком ​исходной файловой системой ext3 (т.е. вы решили,​ что уже не нужно обратное преобразование),​ просто удалите файл /​ext2_saved/​image. +  # Монтирование исходной файловой системы 
-После удаления файла образа диск будет выглядеть примерно так -> +  mount -ext4 /dev/sdX /ext4
-=====Инструкция преобразование 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 +
-Вот отличненько,​ первое это приводим в порядок корневой раздел,​ переделываем его вот в это(инфа о параметрах [[wiki:​fstab?&#​btrfs|тут]]):​ +
-   # / was on /dev/sda3 during installation +
-   ​UUID=d094dfa1-3114-41d0-86da-5e3d91a75a35 /               ​btrfs ​  ​defaults,​subvol=@,​compress,​autodefrag ​ 0 0 +
-Перезагружаем,​ смотрим что вышло. Запустилась?​ отлично,​ значит всё хорошо. Загружаемся с любого 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,​autodefrag ​   0 0 +
-Перезагружаемая, если всё сделано правильно, оно загрузиться. В крайнем случае [который не должен наступить] по вышестоящей инструкции можно вернуть ext* на место.+
  
 =====Подчистка за конвертером===== =====Подчистка за конвертером=====
  
-Если переход на btrfs состоялся окончательно - то не забудьте подчистить за конвертером:​ +Если переход на btrfs состоялся окончательно ​и вы уже не планируете возвращать старую фс - то не забудьте подчистить за конвертером:​ 
-  - Удалите подраздел со снимком ​EXT: btrfs subvolume delete ext2_saved +  - Удалите подраздел со снимком ​ext*: btrfs subvolume delete ext2_saved 
-  - Удалите системный каталог ​ext2-4 ​lost+found (он вам больше не нужен) +  - Удалите системный каталог ​ext* **lost+found** (он вам больше не нужен) 
-  - Проведите дефрагментацию:​ btrfs filesystem defragment ​/ +  - Проведите дефрагментацию:​ btrfs filesystem defragment ​<​точка монтирования btrfs> 
-  - Выполните балансировку:​ btrfs balance start /+  - Выполните балансировку:​ btrfs balance start <​точка монтирования btrfs>
 ===== Ссылки ===== ===== Ссылки =====