Восстановление данных из файловой системы ZFS размещённой на VMware
Пошаговое руководство по восстановлению данных из файловой системы ZFS, размещённой на платформе VMware
В силу отказа нескольких дисков из RAID потерпел крах массив с потерей данных. Остались важные данные, которые критически необходимо восстановить.
Не исключено, что пляски с бубнами могут быть разные, но работающий вариант в конкретно этом случае описан в этой статье.
Я скопировал vmfs хранилище на отдельный диск и подключил его к ESXi.
В ESXi создал новую VM и к ней подключил этот диск, как RDM.
Установка и настройка
Ставим систему, в конкретно этом примере будет рассмотрена Ubuntu.
Установим необходимые пакеты:
apt-get update |
Создаём папку для монтирования диска с данным vmfs-хранилища.
mkdir -p /mnt/6tb |
Находим наш диск.
# fdisk -l |
Монтируем к папке.
mount /dev/sdb1 /mnt/6tb |
Проверяем.
# ls -lah |
Виртуальный диск должен быть доступен в папке /mnt/6tb/xxxx.vmdk, где xxxx — это имя виртуальной машины, которую использовали для запуска. В моем случае это был /mnt/6tb/SD-LAN-NAS_2.vmdk. Прикрепим это к устройству nbd. fdisk -l теперь должен отображать два раздела: раздел подкачки в /dev/nbd1p1 и файловую систему ZFS в /dev/nbd1p2.
modprobe nbd |
# fdisk -l |
Скопируем все устройство на новый диск. Это займет очень много времени, в зависимости от объёма, поскольку копирование побайтовое. status=progress будет отображать ход выполнения копирования.
dd if=/dev/nbd1 of=/dev/sdb bs=64k conv=noerror,sync status=progress |
В качестве /dev/sdb у меня выступает новый виртуальный диск такого же объёма добавленный в VM.

В этом случае воспользуемся утилитой ddrescue.
ddrescue -f -n /dev/nbd1p2 /dev/sdc2 logfile |
Предположим, что поврежденный диск - /dev/nbd1p2, и мы копируем его в /dev/sdc2. Первая из приведенных команд копирует как максимально возможное количество данных без повторных попыток. Вторая команда снова работает с поврежденной файловой системой и делает три попытки чтения. Лог-файл находится в корневой файловой системе.
Процесс копирования

После завершения fdisk -l покажет ZFS файловую систему на /dev/sdc. Удалим NBD-девайс чтобы не было конфликтов и выполним zpool import, который покажет наш пул.
rm /dev/nbd1 |
root@rb:/mnt# zpool import |
Импортируем файловую систему ZFS с нового диска, указав, куда монтировать.
zpool import -f -F -R /mnt/zpool VCD-SHARE |
Теперь пул ZFS должен быть смонтирован, а точка монтирования теперь должна содержать содержимое нашей файловой системы ZFS.