Я экспериментирую с различными файловыми системами для использования на ноутбуке с двойной загрузкой 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.
РЕДАКТИРОВАТЬ: этот ответ НЕПРАВИЛЬНЫЙ! Пожалуйста, посмотрите правильный ответ ниже.