Получение файлов из XFS с размером блока 64 КБ

У меня была задача восстановить файлы с одного из двух моих отлично работающих, не поврежденных, незашифрованных дисков NAS, которые раньше были в RAID 1. NAS был Patriot Javelin S4, который (как я обнаружил в своем исследовании) использует фальшивый raid-контроллер Promise Fasttrack.

Информация об этом очень скудна, поэтому для гуглеров в такой же ситуации вот несколько фактов об этом NAS:

  • RAID-контроллер: Promise FastTrack (FakeRaid)
  • Объемная система: LVM2
  • Файловая система: XFS с размером блока 64 КБ (65536 байт)
  • Arch: 800 МГц процессор AMCC PowerPC, 256 МБ ОЗУ (благодаря исследованиям Мэтью)

При этом у меня был только компьютер с Windows 10 и MacOS, и я не нашел программного обеспечения, способного монтировать XFS на томе LVM2 (за 1 исключением, подробнее об этом ниже). Мне пришлось вытащить мой старый нетбук Acer Aspire One и установить на него puppy linux (в частности, вариант lxpup).

На Puppy Linux мне удалось смонтировать эту файловую систему с помощью инструмента под названием dmraid, У этого инструмента есть способ монтирования тома pdc, который является его идентификатором для Promise FastTrack. Как только мне удалось прыгнуть через несколько обручей, монтирующих его, я получил доступ к реальной файловой системе XFS, и, к моему ужасу, оказалось, что размер блока составляет 64 КБ.

Именно здесь я начал прибегать к поиску таких вещей, как "чтение размера блока xfs 64 КБ" и ни к чему не привел. Только несколько ответов, в которых говорится: "Linux не может читать блоки размером более 4 КБ, если вы не исправите ядро". Я понятия не имею, как исправить ядро, и я сбит с толку, что нет никакой эмуляции, чтобы позволить это.

Я упомянул 1 исключение среди приложений, которые не могут прочитать этот раздел на Win/Mac. Это исключение было ufsexplorer. Это приложение за 100 долларов, оно могло без проблем показывать мне файлы. Я скопировал несколько файлов, доказывая, что это работает, но пробная версия позволяет копировать только крошечные файлы.

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

Мой вопрос: кто-нибудь знает какой-либо такой инструмент? Будем весьма благодарны за любые конкретные инструкции о том, как получить данные с помощью одного или нескольких инструментов, исправлений ядра или чего-то еще (бесплатно).

Еще один момент: я бы предпочел не создавать локальные образы этих дисков (если только это не единственный способ). В конце концов, это 2 ТБ данных, возможно, у меня не так много места.

PS Если есть известный linux, который я могу установить на свой Acer, который может читать 64kb xfs, это тоже жизнеспособное решение.

Обновление 1: я только что узнал о https://www.cgsecurity.org/wiki/TestDisk. Может быть стоит выстрел. Отзовусь, как только у меня будет время попробовать.

Обновление 2: TestDisk, похоже, распознает наличие раздела XFS, но я не уверен, как действовать там. Я не вижу способа извлечь файл, поэтому я просто отказался от него и попробовал подход qemu в ответе Мэтью.

1 ответ

Я провел небольшое исследование вашей проблемы. Не просто, но выглядит выполнимо.

Область кода, нарушающая вас, такова (ну, в более новых ядрах):fs/xfs/libxfs/xfs_sb.c

271         /*
272          * Until this is fixed only page-sized or smaller data blocks work.
273          */
274         if (unlikely(sbp->sb_blocksize > PAGE_SIZE)) {
275                 xfs_warn(mp,
276                 "File system with blocksize %d bytes. "
277                 "Only pagesize (%ld) or less will currently work.",
278                                 sbp->sb_blocksize, PAGE_SIZE);
279                 return -ENOSYS;
280         }

Это в основном требует, чтобы размер блока XFS был как минимум равен размеру системной страницы.

Это означает две вещи.

  1. Это обход ошибки, ранее неизвестной.
  2. Размер страницы системы изначально составлял 64 КБ.

Я пошел и проверил действительно старое ядро ​​(EL4), и указанное выше ограничение все еще было. Это означает, что принципиально невозможно сделать то, что вы хотите сделать в своей архитектуре (x86).

Учитывая то, что вы указали имя NAS, я немного погуглил и обнаружил это: http://www.techwarelabs.com/patriot-javelin-s4-network-attached-storage/2/

Что подразумевает, что он использует процессор PPC.

Аппаратные средства Javelin более чем способны справиться с дополнительными ролями. По сути, это встроенная система Linux с процессором AMCC PowerPC 800 МГц и 256 МБ оперативной памяти.

Действительно, ядра PowerPC могут быть построены так, чтобы использовать страницы размером 64 КБ или 4 КБ. Это объясняет, почему блок имеет размер 64 КБ, а также почему вы не можете запустить файловую систему на своем компьютере, где она раньше работала на собственном NAS.

Если вы хотите попытаться открыть файловую систему - я думаю, что ваш лучший вариант - запустить экземпляр виртуальной машины в гипервизоре с использованием PPC64LE (я думаю, это реальная архитектура этого процессора), Fedora создаст свой PPC64LE с 64k-страницами.

https://alt.fedoraproject.org/alt/

Вы можете использовать QEMU, чтобы сделать это. Этот парень, кажется, дает некоторые (не проверенные) инструкции о том, как вы будете поступать так.

https://rwmj.wordpress.com/tag/ppc64le/

Оттуда непосредственно выставьте диск (и) в виртуальную машину и выполните обычный dmraid/lvm/mount, чтобы получить доступ к диску.

Другие вопросы по тегам