Восстановление данных из файловой системы ZFS размещённой на VMware
В силу отказа нескольких дисков из RAID потерпел крах массив с потерей данных. Остались важные данные, которые критически необходимо восстановить.
Не исключено, что пляски с бубнами могут быть разные, но работающий вариант в конкретно этом случае описан в этой статье.
Я скопировал vmfs хранилище на отдельный диск и подключил его к ESXi.
В ESXi создал новую VM и к ней подключил этот диск, как RDM.
Важно размещать локальный системый файл на локальном хранилище (не vSAN) иначе будет ошибка.
{.is-warning}
Установка и настройка
Ставим систему, в конкретно этом примере будет рассмотрена Ubuntu.
Установим необходимые пакеты:
1 | apt-get update |
Создаём папку для монтирования диска с данным vmfs-хранилища.
1 | mkdir -p /mnt/6tb |
Находим наш диск.
1 | # fdisk -l |
Монтируем к папке.
1 | mount /dev/sdb1 /mnt/6tb |
Проверяем.
1 | # ls -lah |
Виртуальный диск должен быть доступен в папке /mnt/6tb/xxxx.vmdk
, где xxxx — это имя виртуальной машины, которую использовали для запуска. В моем случае это был /mnt/6tb/SD-LAN-NAS_2.vmdk
. Прикрепим это к устройству nbd. fdisk -l
теперь должен отображать два раздела: раздел подкачки в /dev/nbd1p1
и файловую систему ZFS в /dev/nbd1p2
.
1 | modprobe nbd |
1 | # fdisk -l |
Скопируем все устройство на новый диск. Это займет очень много времени, в зависимости от объёма, поскольку копирование побайтовое. status=progress
будет отображать ход выполнения копирования.
1 | dd if=/dev/nbd1 of=/dev/sdb bs=64k conv=noerror,sync status=progress |
В качестве /dev/sdb
у меня выступает новый виртуальный диск такого же объёма добавленный в VM.
Важно! Если есть побитые данные, то не факт, что копирование пройдёт успешно и будут ошибки ввода/вывода.
{.is-warning}
В этом случае воспользуемся утилитой ddrescue
.
1 | ddrescue -f -n /dev/nbd1p2 /dev/sdc2 logfile |
Предположим, что поврежденный диск - /dev/nbd1p2
, и мы копируем его в /dev/sdc2
. Первая из приведенных команд копирует как максимально возможное количество данных без повторных попыток. Вторая команда снова работает с поврежденной файловой системой и делает три попытки чтения. Лог-файл находится в корневой файловой системе.
Если у вас есть поврежденные файлы, которые ddrescue не может полностью восстановить, вам понадобятся другие инструменты для их восстановления, такие как Testdisk, Photorec, Foremost или Scalpel. https://www.klennet.com/zfs-recovery/
{.is-info}
Процесс копирования
После завершения fdisk -l
покажет ZFS файловую систему на /dev/sdc
. Удалим NBD-девайс чтобы не было конфликтов и выполним zpool import
, который покажет наш пул.
1 | rm /dev/nbd1 |
1 | root@rb:/mnt# zpool import |
Импортируем файловую систему ZFS с нового диска, указав, куда монтировать.
1 | zpool import -f -F -R /mnt/zpool VCD-SHARE |
Теперь пул ZFS должен быть смонтирован, а точка монтирования теперь должна содержать содержимое нашей файловой системы ZFS.