Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:ext_to_btrfs [2016/03/03 00:01] [Из ext* в btrfs] |
wiki:ext_to_btrfs [2016/11/09 13:25] |
||
---|---|---|---|
Строка 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. Алгоритм преобразования работает так: | ||
Строка 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 -t 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> |
===== Ссылки ===== | ===== Ссылки ===== | ||