Linux восстановление удаленных файлов btrfs

Обновлено: 04.07.2024

Переход на новую файловую систему, это всегда сложная задача. Мы уже доверяем старой, проверенной файловой системе. Она может даже имеет некоторые ограничения функциональности и производительности, но зато никогда нас не подводила. Новые файловые системы предлагают очень большое количество функций, но возникает вопрос, можно ли им доверять?

Одной из таких файловых систем является Btrfs. Это относительно новая файловая система, которая появилась в 2007 году и была разработана компанией Oracle. Она предлагает очень широкий набор новых возможностей и поэтому сильно интересует пользователей, но до сих пор в сети ходят слухи, что эта файловая система еще не пригодна для постоянного использования. В этой статье мы попытаемся разобраться какие возможности нам дает Btrfs, а также действительно ли ее уже можно использовать.

Что такое Btrfs?

Как я уже сказал, Btrfs была разработана компанией Oracle в 2007 году. Одной расшифровки названия нет, одни говорят, что это значит B-tree FS, другие Better Fs. Также как и в других файловых системах, все данные хранятся на диске по определенным адресам. Эти адреса сохранены в метаданных. И тут уже начинаются различия. Все метаданные организованны в виде b-деревьев. Это дает большую производительность при работе с файловой системой, а также позволяет добавлять неограниченное количество файлов.

Но даже это еще не все. Когда вы перезаписываете файл, данные не перезаписываются, а лишь модифицированная часть копируется в новое место, Затем просто обновляются метаданные. Это позволяет создавать мгновенные снимки файловой системы, которые не занимают места на диске, пока не было внесено много изменений. Если же старый блок больше не нужен, потому что он не является частью какого-либо снимка, то он автоматически удаляется.

Из-за своей структуры Btrfs имеет огромные возможности, например, она может работать с современными очень большими носителями данных. Максимальный размер файловой системы составляет 16 Экзабайт. Это все возможно благодаря правильному использованию пространства на диске. Другие файловые системы используют жесткий диск целиком, от начала до конца для записи своей структуры.

Btrfs поступает по-другому. Каждый диск, независимо от его размера делится на блоки по 1 Гб для данных и 256 Мб для метаданных. Затем эти блоки собираются в группы, каждая из которых может храниться на разных устройствах, количество таких блоков в группе может зависеть от уровня RAID для группы. Менеджер томов уже интегрирован в файловую систему, поэтому больше никакое дополнительное ПО использовать не нужно.

Защита и сжатие данных тоже поддерживается на уровне файловой системы так что здесь вам тоже не нужны дополнительные программы. Также файловая система btrfs поддерживает зеркалирование данных на нескольких носителях. Вот другие особенности btrfs, которые можно упомянуть:

  • Поддержка снимков файловой системы, только для чтения или для записи;
  • Контрольные суммы для данных и метаданных с помощью алгоритма crc32. Таким образом, можно очень быстро определить любые повреждения блока;
  • Сжатие с помощью Zlib и LZO;
  • Оптимизация для работы с SSD, файловая система автоматически определяет ssd и начинает вести себя по-другому;
  • Фоновый процесс для обнаружения и исправления ошибок, а также дефрагментации и дедупликации в реальном времени;
  • Поддерживается преобразование из ext4 и ext3.

Все это очень хорошо, но можно ли уже использовать эту файловую систему? Попробуем разобраться и с этим.

Готова ли Btrfs к использованию?

Вокруг Btrfs до сих пор сохранилось много неправильных представлений. Многие из них происходят от реальных проблем, которые были в начале разработки файловой системы. Но люди, просматривая эту информацию не смотрят на ее дату. Да Btrfs действительно была нестабильной и неустойчивой. Было очень много проблем с потерей данных и много пользователей писали об этом, но это было еще в 2010 году.

Самая важная часть файловой системы - это ее формат хранения на диске. Но формат файловой системы Btrfs уже зафиксирован, это случилось еще в 2012 году и он больше не изменяется без крайней необходимости. Это само по себе достаточно, чтобы признать стабильность btrfs.

Но почему же Btrfs считается многими нестабильной? Этому есть несколько причин. Во-первых, это боязнь пользователей к новым технологиям. Это было не только в Linux, но и в Microsoft, при их переходе на NTFS, и в Apple. Но здесь есть некоторый парадокс, файловая система XFS прошла 20 лет стабильного развития, но самой стабильной файловой системой считается ext4, которая была разработана из форка ext3 в 2006 году. Фактически она на год старше Btrfs.

Вторая причина в активной разработке, хотя формат хранения данных заморожен, основная кодовая база еще активно разрабатывается и там есть еще много места для улучшения производительности и внедрения новых функций.

Но уже есть много подтверждений, что файловая система готова. Эта файловая система используется на серверах Facebook, где компания хранит свои важные данные. А это уже само по себе важный фактор. Над улучшением файловой системы работают такие компании как Facebook, SuSE, RedHat, Oracle, Intel и другие. Эта файловая система используется в SUSE Linux Enterprise по умолчанию, начиная с выпуска 12. Все эти факторы вместе доказывают, что файловая система вполне готова к использованию. А учитывая функциональность и особенности btrfs ее уже можно использовать.

Использования Btrfs

Почему стоит использовать Btrfs и стоит ли вообще, разобрались. Теперь хотелось бы показать немного практики, чтобы вы могли оценить эту файловую систему в действии. Я буду приводить примеры на основе Ubuntu. Сначала установим инструменты для управления файловой системой:

sudo apt install btrfs-tools

Создание файловой системы btrfs

Сначала нужно создать файловую систему. Допустим, у нас есть два жестких диска /dev/sdb и /dev/sdc, мы хотим создать на них единую файловую систему с зеркалированием данных. Для этого достаточно выполнить:

sudo mkfs.btrfs /dev/sdb /dev/sdc

btrfs

По умолчанию будет использоваться RAID0 для данных (без дублирования, и RAID1 для метаданных (дублирование на один диск). При использовании одного диска метаданные тоже дублируются, если вы хотите отключить это поведение можно использовать опцию -m single:

sudo mkfs.btrfs -m single /dev/sdb

Но делая это, вы повышаете опасность потери данных, поскольку если метаданные будут утеряны, то данные тоже.

Посмотреть информацию о только что созданной файловой системе вы можете командой:

sudo btrfs filesystem show /dev/sdb

btrfs1

Или обо всех подключенных файловых систем:

sudo btrfs filesystem show

Монтирование btrfs

Для монтирования используйте обычную команду:

sudo mount /dev/sdb /mnt

btrfs2

Вы можете монтировать любой из дисков, это приведет к одинаковому эффекту. Строчка в /etc/fstab будет выглядеть так:

/dev/sdb /mnt btrfs defaults 0 1

Теперь смотрим информацию о занимаемом месте на дисках:

sudo btrfs filesystem df /mnt

btrfs3

Сжатие в btrfs

Для включения сжатия достаточно добавить опцию compress при монтировании. Ей можно передать алгоритм lzo или zlib:

sudo mount -o compress=lzo /dev/sdb /mnt
sudo mount -o compress=zlib /dev/sdb /mnt

Восстановление Btrfs

Для восстановления поврежденной Btrfs используйте опцию монтирования recovery:

sudo mount -o recovery /dev/sdb /mnt

Изменение размера

Вы можете изменить размер тома в реальном времени, для этого используйте команду resize:

sudo btrfs filesystem resize -2g /mnt

btrfs4

Уменьшит размер на 2 гигабайта. Затем увеличим на 1 Гигабайт:

sudo btrfs filesystem resize +1g /mnt

btrfs5

Создание подтомов

Вы можете создавать логические разделы, подтома внутри основного раздела с помощью Btrfs. Они могут быть примонтированы внутри основного раздела:

sudo btrfs subvolume create /mnt/sv1
sudo btrfs subvolume create /mnt/sv2
sudo btrfs subvolume list /mnt

btrfs6

Монтирование подтомов

Вы можете примонтировать подтом по id, полученному с помощью последней команды:

sudo umount /dev/sdb

sudo mount -o subvolid=258 /dev/sdb /mnt

Или вы можете использовать имя:

sudo mount -o subvol=sv1 /dev/sdb /mnt

Удаление подтомов

Сначала подключите корень btrfs вместо подтома:

sudo umount /mnt

sudo mount /dev/sdb /mnt/

Чтобы удалить подтом можно использовать путь монтирования, например:

sudo btrfs subvolume delete /mnt/sv1/

Создание мгновенных снимков

Файловая система Btrfs позволяет создавать мгновенные снимки изменений. Для этого используется команда snapshot. Например, создадим файл, затем сделаем снимок:

touch /mnt/sv1/test1 /mnt/sv1/test2

sudo btrfs subvolume snapshot /mnt/sv1 /mnt/sv1_snapshot

btrfs7

Дефрагментация btrfs

Из-за использования копирования при записи может возникать фрагментация. Чтобы запустить дефрагментацию файловой системы используйте команду:

sudo btrfs filesystem defrag /mnt

btrfs9

Выводы

Как видите, файловая система btrfs очень интересная и перспективная. К тому же она уже полностью готова к использованию и достаточно стабильна. А вы уже пользуетесь Btrfs? Собираетесь пользоваться после прочтения статьи? Напишите в комментариях внизу!

В нашей статье вы узнаете, как восстановить данные с программного btrfs RAID ОС Linux. Как его создать, заменить нерабочий диск и восстановить утерянную информацию с поврежденного массива.

image



Обычно для создания RAID массива в ОС Linux используют mdadm и lvm, подробнее об этих системах можно посмотреть в одном из наших видео уроков.

Помимо этих инструментов, о которых рассказано в видео, еще встроенная поддержка RAID есть в файловой системе Btrfs. Она обходится собственными средствами для построения и работы с дисковыми массивами, далее давайте более детально рассмотрим все ее возможности.

Файловая система btrfs

Btrfs – это новая файловая система с поддержкой функции копирования при записи (Copy on Write) со встроенной поддержкой RAID. Суть этой замечательной функции состоит в отсутствии перезаписи старых данных при копировании. Это огромный плюс, она значительно упрощает восстановление удаленных файлов после сбоев. Так как любой сбой или ошибка в процессе переписывания никак не повлияют на предыдущее состояние файлов.

ФС хранит метаданные отдельно от данных файловой системы, и вы можете одновременно использовать разные уровни RAID для этой информации, это главное ее преимущество. Также целью этой журналируемой системы, является обеспечение более эффективного управления хранилищем и увеличенной безопасностью целостности данных в ОС Linux.

Перед началом использования btrfs, нам понадобиться доустановить необходимые инструменты управления ФС, выполнив следующую команду:

sudo apt install btrfs-tools

image

Создание точки монтирования

И прежде чем собрать RAID необходимо создать каталог точки монтирования.

Sudo mkdir –v /data

Где «data» – это его название.

image

Теперь приступаем к созданию массива.

Как создать RAID5

Создавая массив, не нужно в обязательном порядке размечать носители на разделы, ФС не требует этого. Объединять накопители в массив, можно как целые, так и отдельные разделы, даже объединять носители с имеющимися разделами. Для примера я покажу как создать RAID5 из пяти накопителей.

Чтобы постоянно не вводить пароль root выполните команду sudo -i, после чего все команды будут выполняться от администратора.

image

Для построения массива введите в терминале такую команду:

sudo mkfs.btrfs -L data -m raid5 -d raid5 -f /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf

где: L — метка или имя файловой системы,

  • d — устанавливаем тип RAID5 для данных.
  • m — устанавливаем тип RAID5 для метаданных.
  • f — служит для принудительного создания btrfs, даже если какой-либо из накопителей отформатирован в другой ФС.

Теперь, можно монтировать, используя любой из накопителей который входит в состав.

Как смонтировать RAID диск

Я использовал 5 накопителей для создания RAID: sdb, sdc, sdd, sde и sdf. Поэтому я могу смонтировать данные ФС в каталоге data с помощью диска sdb. Открываем управление дисками и монтируем наш носитель, после чего он станет доступным.

image

Или же можно смонтировать диск через терминал.

sudo mount /dev/sdb1 /data

Чтобы проверить введите sudo df -h

Как видите, наш массив смонтирован в каталог /data

image

А чтобы посмотреть информацию о занятом и свободном пространстве массива, вводим:

sudo btrfs filesystem usage /data

image

А для размонтирования массива достаточно ввести:

sudo umount /data

Как заменить или добавить накопитель
Для замены накопителя нужно в терминале ввести btrfs replace. Она запускается асинхронно, то есть выполняется постепенно:

  • start — для запуска,
  • cancel — для остановки,
  • status — а для просмотра состояния.

sudo btrfs filesystem show

image

Затем заменить его на новый:

btrfs replace start <удаляемое устройство или его ID> <добавляемое устройство> <путь, куда смонтирована btrfs>

В моем случае вводим:

btrfs replace start 3 /dev/sdg

где: 3 – это номер отсутствующего диска, а sdg – код нового накопителя.

image

Как восстановить поврежденный том

Для восстановления Btrfs массива, нужно использовать встроенную опцию монтирования — recovery:

sudo mount -o recovery /dev/sdb /mnt

image

Далее начнется процесс восстановления.

Восстанавливаем данные с btrfs RAID5

Даже самая надежная и отказоустойчивая система мажет выйти из строя. Сбой системы, выход из строя накопителя, аппаратной части, повреждение метаданных, случайное удаление, неправильная настройка все это может повлечь за собой поломку RAID и утерю важных данных. Если вы столкнулись с этим воспользуйтесь программой Hetman RAID Recovery. Она способна восстановить любую информацию с нерабочих массивов или носителей, которые входили в массив. Утилита воссоздаст разрушенный RAID, пошагово вычитывая всю известную информацию, далее вы сможете скопировать все найденные данные.

Подключите носители к ПК с установленной Windows, воспользуйтесь виртуальной машиной, или установите ее второй системой.

Программа автоматически просканирует дисковое пространство, и отобразит всю возможную информацию о массиве.

image

Как видите, в нашем случае с btrfs RAID, программа не собирает носители в массив, это связано со спецификой его построения, при этом вся информация хранится в соответствии с типом RAID.

Для начала процесса восстановления откройте менеджер дисков, кликните правой кнопкой мыши по любому из дисков из которых состоял массив и запустите «Быстрое сканирование».

image

При сканировании любого из дисков результат будет идентичным, так как они все являются частью одного массива.

По завершении анализа программа отобразит найденные файлы, здесь доступен их пред.просмотр, с помощью которого легче найти нужные изображения или видео.

image

Отметьте файлы, которые нужно вернуть и нажмите «Восстановить», укажите путь куда их сохранить и еще раз «Восстановить». По завершении все файлы будут лежать в указанной папке.

image

Если в результате быстрого сканирования программе не удалось найти нужных файлов выполните «Полный анализ». Данный тип анализа займет больше времени, но при этом найдет всю информацию, которая осталась на диске, даже ту которая была давно удалена с диска.

image

Так как это пятый RAID вся информация остается целой при отсутствии одного накопителя, но, если вышли из строя 2 диска часть информации будет повреждена.

image

Особенности файловой системы btrfs

Btrfs поддерживает сжатие данных. То есть, вся имеющаяся информация на носителях будет автоматически сжиматься. А при обращении к данным, каждый конкретный файл будет автоматически распакован.

Эта функция позволяет значительно экономить пространство на накопителях, а также время на поиски стороннего ПО для сжатия данных. ФС поддерживает 3 основных метода сжатия файлов – это zlib, lzo и zstd. Их основное отличие заключается в степени, а также скорости сжатия.

Наша программа поддерживает восстановление сжатых файлов любым из этих трех методов. В интерфейсе программы сжатые тома и файлы отображаются следующим образом, как видите они подсвечены другим цветом.

Еще одним из главных преимуществ является создание подтомов (subvolum-ов). Простыми словами на одном накопителе можно создать к примеру 3 разных диска (subvolum-а). Эти подтома способны расширяться самостоятельно, за счет свободного пространства другого тома. Такая возможность при необходимости позволяет расширить один диск за счет другого без сжатия и переноса данных. Эти подтома отображаются в программе следующим образом, это диски внутри основного накопителя.

image

Таким же образом в программе отображены и папки со snap-shot-ами.

Для создания подтомов используйте команду:

btrfs subvolume create /mnt/btrfs/my-subvolume

image

А для просмотра списка подтомов на этом накопителе выполните:

btrfs subvolume list /mnt/btrfs

image

Для монтирования подтома:

mount -o subvol=my-subvolume /dev/sdd2 /mnt/btrfs2

где sdb1 — это код диска.

image

Заключение

Существует небольшое количество инструментов для восстановления данных, которые умеют читать btrfs RAID. При выборе стоит учитывать, что в процессе работы информация может затереться, обратите внимание на наличие функции создания образа массива и сканирования с образа. И все же лучшим решением уберечь себя от потери важных данных будет их регулярное резервное копирование.

Полную версию статьи со всеми дополнительными видео уроками смотрите в источнике. Если у вас остались вопросы, задавайте их в комментариях. А также зайдите на наш Youtube канал, там собраны более 400 обучающих видео.

Как восстановить (восстановить) удаленный файл на разделе btrfs?

Я еще не сделал снимок, поэтому я не могу использовать эту функцию. Я знаю, что есть некоторые инструменты для других файловых систем Linux, но Google не нашел ничего специфического для btrfs. Я наткнулся на одно смутное упоминание о том, что в btrfs есть инструмент для восстановления, но я не могу его найти. Прежде чем пробовать инструменты для другой файловой системы, я спрашиваю здесь.

Больше информации:

  • (Два) удаленных файла были удалены удаленной rsync командой, которая пошла не так.
  • Это были небольшие текстовые файлы.
  • Я знаю имена файлов.
  • Я мог бы вспомнить некоторые строки в файлах.
  • Диск является обычным жестким диском, но он большой (2 ТБ).
  • Я использую Kubuntu 12.04 (бета2) со всеми последними обновлениями.
  • Я не записал никаких новых данных в раздел, из которого были удалены файлы.
  • У меня нет снимка или резервной копии этих файлов. (Последняя резервная копия всего на несколько часов старше этих файлов.)
  • Как ни странно, файловая система COW, кажется, имеет меньше вариантов восстановления файлов, чем ext3 / 4 .

Поскольку ваши файлы имеют небольшой размер и простой текст, я бы попытался отсканировать вывод «строк» ​​на устройство, где находится файловая система, т. Е.

затем используйте «/» для поиска строк, которые могут быть в этом файле. Когда вы найдете текст, разделите его начало с помощью «m», затем перейдите к концу и используйте «| cat> file», чтобы сохранить его в файл.

Я действительно сделал это, когда несколько лет назад у меня была похожая ситуация на другой файловой системе без восстановления, и она отлично работала для меня.

Йорг Вальтер реализовал btrfs-undelete сценарий оболочки, используя инструменты find-root и , которые можно найти здесь , и должен помочь другим в аналогичной ситуации. restore btrfs-progs

Поскольку он лицензирован по GPLv2, я не могу включить его сюда.

Стоит отметить, что указанный скрипт имеет по крайней мере один путь, жестко закодированный (предположительно по ошибке) и имеет несколько других проблем, поэтому покупатели должны остерегаться того, что он должен быть отредактирован перед использованием. «Поскольку он лицензирован по GPLv2, я не могу его сюда включить» - возможно, вам следует прочитать то, что говорит GPLv2, потому что это не имеет никакого смысла. @slang Может быть, вы должны прочитать условия обслуживания этого сайта? Вклады должны быть лицензированы в соответствии с лицензией Creative Commons Attribution Share Alike 3.0. @suriv - Думаю, я могу понять их причины, но это довольно раздражает. Тем более, что CC-BY-SA является лишь немного более ограничительным, чем GPL (кроме материала патента GPLv3s).

Если вы хотите сделать это вручную, вам нужно получить правильный subvol-id, либо с помощью:

После этого вы используете btrfs-find-root номер блока, к которому хотите вернуться (обычно тот, который находится непосредственно перед максимальным, который является текущим корнем). Для этого вам нужно сначала установить подобъем по умолчанию на тот, из которого вы хотите восстановить файлы (и впоследствии отменить это изменение):

Наконец, вы можете использовать btrfs restore с -r <subvol-id> для восстановления (изначально с --dry-run аргументом, если хотите):

lsblk - подсветить все разделы что бы определиться что монтировать.

При необходимости разбить диск, флаг -z обнулить таблицу разделов.

Создадим три подтома root, домашний каталог пользователя и подтом для хранения.

Для переноса смонтируйте резервную систему и перенесите ее.

И отмонтируем корень ФС.

Чтобы монтировать подтом подобно обычному разделу диска, команде mount нужно указывать опцию subvol=PATH. PATH - путь относительно корня ФС. Монтируем корень. Сжатие zstd, или lzo.

Создаём директорию и монтируем в неё наш будущий каталог пользователей, если boot раздел отдеольно, нужно его тоже смонтироват в /mnt/boot .

Если нужно mkdir /mnt/home .

Если нужно mkdir /mnt/snapshots .

Начиная с ядра 5.0 можно создать swap-файл, swap-файл должен располагаться целиком на одном устройстве, создаваться с отключенным COW и сжатием.

Теперь нужно проинициализировать систему. Редактируем FSTAB, или запускаем genfstab.

Переходим в нашу новую систему.

Генерация initramfs с помощью mkinicpio.

Установить загрузчик GRUB2 и сконфигурировать его.

exit или “Ctrl + D” выйти из chroot.

Теперь нужно все размонтировать.

Монтируем основной раздел.

Монтируем раздел/диск для сброса снапшота.

Нужно создавать снапшоты, только для чтения(readonly), требует send . Для отправки на другие узлы.

Сбрасываем все из кэша на диск sync , ВАЖНО.

Переносим снапшоты. Можно send в файл btrfs send /mnt/arch/@_BACKUP -f /dump.sn , receive из файла btrfs receive /mnt/dump/ -f /dump.sn .

Инкрементальные readonly снимки.

Создаём разность между снимками.

Локально: генерируем ключи, создаём

Всё это работает и в обратном порядке.

Удаляем или переименовываем mv .

Переименовываем новые snapshot(ы).

Свойства. Сейчас они в ro - read-only(только чтение), изменим на rw - read-write(чтение-завись). Значения изменяются так: ro true , ro false .

Удаляем, если нужно.

Восстановление, как и выше, грузимся с live-usb, или с другой системы. Монтируем раздел для восстановления, поврежденный и раздел с backup, восстанавливаем снапшоты.

Монтируем файловую систему, для пересоздания fstab и инициализации.

Если boot раздел отдеольно, то нужно его тоже смонтироват в /mnt/boot и все другие subvolume.

Начиная с ядра 5.0 можно создать swap-файл, swap-файл должен располагаться целиком на одном устройстве, создаваться с отключенным COW и сжатием.

Читайте также: