我在一个单磁盘ZFS池中造成了一个愚蠢的意外,看起来就像这个邮件列表线程中的人一样,也就是说,我似乎已经覆盖了重要的元数据。 这可以从实际的有效载荷恢复,还是有没有办法检索有效载荷没有元数据?
这就是我所做的,确切地说:
zpool export到第一台机器上 zpool create抱怨设备正在使用,我想“没问题,我只是把主机,不再使用”,做了zpool create -f 我应该做的(就像我在RTFM后意识到的那样)是import而不是在新主机上create的。 现在我有一个工作zfspool,但文件系统已经消失/不可见。
我尝试重新导入旧主机上的设备,后来尝试import -D ,但是,显然,两者都不起作用。
首先要做的事情是在尝试任何事情之前先得到磁盘的位stream拷贝。
做一个zpool import -D做什么?
如果我是诚实的,我不认为这是因为新的池已经覆盖原池中的所有标签,块和指针块。
磁盘/分区的顶部和底部512千字节包含标签,其中包括最后几个uberblocks(用于恢复和回滚)以及池的RAID几何(更具体地,磁盘是vdev的一部分)的列表。 通过build立一个新的游泳池,你几乎可以肯定地消灭了旧的标签。 这意味着你需要知道池的确切几何形状(使用磁盘顺序的RAID-Zconfiguration),并以艰难的方式去寻找uberblocks。
一个zpool创build覆盖设备上的所有标签(这就是为什么你必须添加“-f”,这意味着“如果所有错误都怪我”)。 由于vdev标签包含根块指针(指向整个池对象树的根块),并且在添加新数据(由于COW语义)的情况下,块指针中的值会左右移动,因此数据不见了