У меня есть жесткий диск, который когда-то принадлежал зеркальному пулу ZFS с 3 дисками на сервере Ubuntu 12.04, который называется d510
. Диск был отключен правильно, но его файловая система tank0
не экспортировался.
Теперь я хотел бы восстановить несколько файлов с этого диска, смонтировав его в другой настольной системе Xubuntu 14.04. В этой настольной системе диск выглядит как:
$ ls /dev/disk/by-id/
...
ata-WDC_WD10EADS-00M2B0_WD-WCAV51264701
ata-WDC_WD10EADS-00M2B0_WD-WCAV51264701-part1
ata-WDC_WD10EADS-00M2B0_WD-WCAV51264701-part9
...
Данные, по-видимому, относятся исключительно к part1
раздел как part9
очень маленький. Однако zdb
показывает, что этот конкретный раздел диска когда-то был дочерним 2 и вызывался на сервере Ubuntu 12.04 по-другому, а именно scsi-SATA_WDC_WD10EADS-00_WD-WCAV51264701-part1
.
$ sudo zdb -l /dev/disk/by-id/ata-WDC_WD10EADS-00M2B0_WD-WCAV51264701-part1
--------------------------------------------
LABEL 0
--------------------------------------------
version: 5000
name: 'tank0'
state: 0
txg: 0
pool_guid: 8764435549195071605
hostname: 'd510'
top_guid: 4212287141343472152
guid: 10584802241354722513
vdev_children: 1
vdev_tree:
type: 'mirror'
id: 0
guid: 4212287141343472152
metaslab_array: 31
metaslab_shift: 33
ashift: 12
asize: 1000189984768
is_log: 0
create_txg: 4
children[0]:
type: 'disk'
id: 0
guid: 4518508443267048848
path: '/dev/disk/by-id/scsi-SATA_WDC_WD10EARS-00_WD-WCAV56475795-part1'
whole_disk: 1
DTL: 118
create_txg: 4
resilvering: 1
children[1]:
type: 'disk'
id: 1
guid: 12490123066008148558
path: '/dev/disk/by-id/scsi-SATA_WDC_WD10EARS-00_WD-WCAV56524564-part1'
whole_disk: 1
DTL: 120
create_txg: 4
resilvering: 1
children[2]:
type: 'disk'
id: 2
guid: 10584802241354722513
path: '/dev/disk/by-id/scsi-SATA_WDC_WD10EADS-00_WD-WCAV51264701-part1'
whole_disk: 1
DTL: 126
resilvering: 1
features_for_read:
create_txg: 0
--------------------------------------------
LABEL 1
--------------------------------------------
...
Из-за этой разницы в имени идентификатора я создал следующие программные ссылки:
sudo ln -s ata-WDC_WD10EADS-00M2B0_WD-WCAV51264701 scsi-SATA_WDC_WD10EADS-00_WD-WCAV51264701
sudo ln -s ata-WDC_WD10EADS-00M2B0_WD-WCAV51264701-part1 scsi-SATA_WDC_WD10EADS-00_WD-WCAV51264701-part1
sudo ln -s ata-WDC_WD10EADS-00M2B0_WD-WCAV51264701-part9 scsi-SATA_WDC_WD10EADS-00_WD-WCAV51264701-part9
Тем не менее, как и в случае с предыдущими менее сложными попытками, файловая система не будет ни импортировать (ни экспортировать в этом отношении):
$ sudo zpool import -o rdonly=on -d . -D -f -X -R /mnt 8764435549195071605
no pools available to import
Есть ли предложения о том, как импортировать этот потерянный зеркальный диск ZFS на этот другой хост?
Должен ли я, возможно, создать еще больше программных ссылок для других дисков и разделов, указывающих на этот единственный диск?
Данные наверняка все еще доступны на диске, однако ZFS в Linux кажется довольно разборчивым в том, что разрешено импортировать. Пулы ZFS отлично подходят для системы, в которой они созданы, но сценарии восстановления и обновления, похоже, серьезно затруднены из-за этого поведения.
Когда пул создается, он внутренне привязан к хост-системе. Хост-система хранит информацию о пуле, чтобы она могла определить, когда пул недоступен. источник
но все равно
Если вы не экспортируете пул явно, а вместо этого удаляете диски вручную, вы все равно можете импортировать полученный пул в другую систему. Однако вы можете потерять последние несколько секунд транзакций с данными, и в исходной системе окажется, что пул неисправен, поскольку устройств больше нет. источник
Некоторые мысли:
Согласно странице руководства, -D импортирует только пулы, которые были уничтожены. Может быть, ваш бассейн никогда не был разрушен и поэтому не появится?
Может быть, эти варианты могут вам помочь?
-F
Recovery mode for a non-importable pool.
Attempt to return the pool to an importable
state by discarding the last few transactions.
Not all damaged pools can be recovered by
using this option. If successful, the data
from the discarded transactions is
irretrievably lost. This option is ignored if
the pool is importable or already imported.
-n
Used with the -F recovery option. Determines
whether a non-importable pool can be made
importable again, but does not actually
perform the pool recovery. For more details
about pool recovery mode, see the -F option,
above.