Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
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> |
| ===== Ссылки ===== | ===== Ссылки ===== | ||