Назад | Перейти на главную страницу

Невозможно получить пул ZFS, созданный в OSX, для импорта в систему Linux

Я экспериментирую с различными файловыми системами для использования на ноутбуке с двойной загрузкой Linux / OSX, который будет выступать в качестве платформы для тестирования. Несмотря на то, что это вариант BSD, у меня было много проблем с поиском совместимой файловой системы, но я остановился на реализации OpenZFS.

В обеих системах установлена ​​последняя версия OpenZFS 0.6.3-1. Первоначально я создал пул из OSX, используя / dev / disk0s6. Все работает нормально в OSX с установкой диска и возможностью записи:

$ zpool status
  pool: Data
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    Data        ONLINE       0     0     0
      disk0s6   ONLINE       0     0     0

errors: No known data errors

$ zpool import
   pool: Data
     id: 16636970642933363897
  state: ONLINE
 action: The pool can be imported using its name or numeric identifier.
 config:

    Data        ONLINE
      disk0s6   ONLINE

Но когда я экспортирую zpool и перезагружаюсь в Linux, я не могу импортировать пул даже с -f:

$ zpool import -f Data
cannot import 'Data': one or more devices are already in use

$ zpool import
   pool: Data
     id: 16636970642933363897
  state: UNAVAIL
 status: One or more devices contains corrupted data.
 action: The pool cannot be imported due to damaged devices or data.
   see: http://zfsonlinux.org/msg/ZFS-8000-5E
 config:

    Data                                         UNAVAIL  insufficient replicas
      ata-Corsair_Force_GT_135004090FF015790001  UNAVAIL

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

Что я делаю не так?

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

Настоящая проблема в том, что я создал пул, используя последний раздел диска, который в Linux можно спутать с повреждением, если раздел достаточно близко совмещен с концом диска.

ZFS создает четыре метки на целевом устройстве для резервирования, две в начале и две в конце. Когда ZFS оценивает диск после загрузки в Linux, сначала он обнаруживает / dev / sda, что обеспечивает частичное совпадение с двумя последними метками в конце диска (с последнего раздела). Затем он ошибочно полагает, что устройство повреждено, поскольку в начале диска нет меток.

Решением было добавить буфер размером не менее 10 МБ свободного места в конце диска.

Полную информацию можно найти здесь: https://github.com/zfsonlinux/zfs/issues/2742

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

Например, я создал zpool и сослался на устройство из OSX с помощью «/ dev / disk0s6», которого нет в Linux. Я создал символическую ссылку с / dev / disk0s6 на / dev / sda6, и теперь все работает нормально.

Ссылаясь на эти вопросы:

Пул ZFS RAID0 без резервирования

Почему в результате перезагрузки одна сторона моего зеркала ZFS стала UNAVAIL?

Похоже, что при обращении к устройству мне нужно учитывать переносимость. Например, с использованием UUID раздела, который останется неизменным между двумя ОС.

Я думаю, что эта информация будет полезна для тех, кто плохо знаком с ZFS.

РЕДАКТИРОВАТЬ: этот ответ НЕПРАВИЛЬНЫЙ! Пожалуйста, посмотрите правильный ответ ниже.