linux块设备同步,linux – 普通块设备上类似LVM的快照

使用device-mapper快照目标.请注意,它不会掩盖底层坏磁盘的I / O错误,因此这最适合于文件系统损坏的好磁盘.

tl; dr – 跳过我背景故事的以下三段.

我处理的最新事件还涉及带有4个磁盘但位于USB机箱中的RAID5.它使用NTFS格式化,具有讽刺意味的是使用gddrescue从发生故障的笔记本电脑磁盘恢复的640GB磁盘映像,在此期间该盒报告磁盘故障300GB.我没有执行ddrescue,所以在我被要求帮助之前,坏的笔记本电脑磁盘被送去替换.

我到了,必须找到一种方法,在我访问RAID盒的有限时间内尽可能多地检索图像文件. (它是借来的,我是从外面来的.)外壳有一个缺陷,在电源循环时它忘记了磁盘故障,因此RAID可能会在几天内无法同步,无声地破坏NTFS,因此ntfs-3g拒绝登上它.我设法恢复300GB而不是更多,但这足以恢复图像中包含的许多其他丢失的文件. (我运行了testdisk,scrounge-ntfs和ntfsundelete,但我选择不使用photorec.)我最终使用testdisk从NTFS读取图像文件,但我也尝试过使用testdisk来修复NTFS足以制作ntfs-3g合作,甚至在VirtualBox中运行chkdsk,它只能将图像截断为零字节.

我发现尝试几种互斥的破坏性方法是非常有价值的,以便找到最佳解决方案.

device-mapper快照目标使用dm-snapshot内核模块,该模块在块级别上执行写时复制.在我的步骤中,我将对失败的磁盘/ dev / failing进行操作.您需要提供足够大的块设备来存储我将调用/ dev / cow的更改.请勿将快照例外存储重用于您创建的其他写时复制设备,这一点非常重要.

# Make it much harder to accidentally overwrite anything

# Run on all partition sub-devices as well,if applicable

1. blockdev --setro /dev/failing

# Create /dev/mapper/top

2. echo 0 `blockdev --getsz /dev/failing` snapshot /dev/failing /dev/cow p 4 | dmsetup create top

# Manipulate /dev/mapper/top as you wish

# Tear-down

3. dmsetup remove top

我提供了两种创建/ dev / cow的替代方法:

A.使用稀疏文件

# Create a sparse file

1. dd if=/dev/zero bs=1048576 count=0 seek=size_in_MB of=tempfile

# Print name of next unused loop device

2. losetup -f

# Associate the file with a loop device

3. losetup -f tempfile

# Use as /dev/cow

# Use the name from #2 here

4. losetup -d /dev/loopX

5. rm tempfile

B.使用zram内核模块(如果适应ramzswap或compcache,请参阅文档!)

# Create 4 of them - zram0-3 (you may run into a need for more than one)

1. modprobe zram num_devices=4

# Set size

2. echo $((1048576*size_in_MB)) > /sys/block/zram0/disksize

# Associate with a loop device (dmsetup will fail with zramX but not loopX!)

3. losetup -f

4. losetup -f /dev/zram0

# Use as /dev/cow

# Use the name from #3 here

5. losetup -d /dev/loopX

6. echo reset > /sys/block/zram0

在我有时限的情况下,我需要在某处复制300GB图像,但我没有空间,所以我压缩它(到25GB).

如果您需要存储块设备的压缩只读副本以供以后使用而不创建中间文件,我建议使用squashfs.使用(un)chunkfs(需要FUSE)将设备分解为4GB块,并在每个块上单独运行mksquashfs.这样它就可以存储在FAT32卷上,也可以存储在NTFS上,而不会从ntfs-3g创建大文件的高cpu使用率.我建议校验和生成的文件,如果要添加冗余,可以尝试使用par2.

为了重新组装设备内容,您很可能需要超过默认的8个循环设备.要做到这一点,modprobe循环max_loop = 2048或者如果它被编译到你的内核中,那么将max_loop = 2048添加到你的内核命令行.挂载每个squashfs并将文件关联到循环设备.最后,使用dmsetup使用线性目标连接它们. (阅读man dmsetup并最好记住-r开关,否则写入将被删除而不是立即失败.)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值