微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如果对故事不感兴趣,请跳过问题

一个4磁盘raid 5阵列上不幸丢失了2个磁盘后,我进入了一些伏都教,尽可能多地收回数据.

一个带有弱点迹象的驱动器被替换,并且在重建期间(约80%通过),第二个驱动器在一些死区域上失败.

长话短说,现在我有两个驱动器(2和4)处于一致状态.一(3)个同步,但中间有坏扇区.由于重建过程,最后一个(1)仅部分同步.
对于总共4.1 Tb阵列,磁盘为1.5 Tb.

在234,124和1234配置上尝试了所有只读伏都教之后,我已经能够获得大部分重要数据. (4.1 Tb整体上只有100 Gb.)

现在下一步是尝试一些文件系统(reiserfs)重建,看看我是否能够获得更多数据.
这些操作具有破坏性.我有三个工作磁盘设置在不同的状态尝试.

所以问题

有没有办法制作任何类型的md块设备的快照,并在不改变md设备的情况下处理这个问题?

一些要点:

>无论性能如何,非常慢是可以接受的.
>我在外部临时驱动器上有2 * 2 Tb的存储空间,可用于快照的“更改日志”.
>我没有足够的存储空间将整个设备(md)复制到另一个地方并用它制作一个lvm卷. (也不是分别为每个驱动器成像的空间)
>不需要及时可靠,快照将在数据恢复后删除(如果有的话).
>嗯,我认为很清楚:我只需要读取只读md然后抛弃更改.

有任何想法吗?

谢谢!

最佳答案
使用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开关,否则写入将被删除而不是立即失败.)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


在Linux上编写运行C语言程序,经常会遇到程序崩溃、卡死等异常的情况。程序崩溃时最常见的就是程序运行终止,报告 Segmentation fault (core dumped) 错误。而程序卡死一般来源于代码逻辑的缺陷,导致了死循环、死锁等问题。总的来看,常见的程序异常问题一般可以分为 非法内存访
git使用小结很多人可能和我一样,起初对git是一无所知的。我也是因为一次偶然的机会接触到git,并被它强大的功能所蛰伏。git其实就是一种版本控制工具,就像svn一样,但是git是分布式的。我不想给git打广告,我们直入正题——git能帮我们做什么?1)源码版本控制。平常写一写demo程序可能和g
1. 操作系统环境、安装包准备 宿主机:Max OSX 10.10.5 虚拟机:Parallel Desktop 10.1.1 虚拟机操作系统:CentOS 7 x86_64 DVD 1511.iso Oracle:linux.x64_11gR2_database_1of2.zip linux.x6
因为业务系统需求,需要对web服务作nginx代理,在不断的尝试过程中,简单总结了一下常见的nginx代理配置。 1. 最简反向代理配置 在http节点下,使用upstream配置服务地址,使用server的location配置代理映射。 upstream my_server { server 10
Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核的目的。一直以来,对linux的模块机制都不够清晰,因此本文对内核模块的加载机制进行简单地分析。 模块的Hello World! 我们通过创建一个简单的模块进行测试。首先是源文件main.c和Makefile。 f...
一、Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个Master组件提供服务,其中正在使用的组件称为Active,另一个作为备份称为Standby,例如HDFS的NameNode、YARN 的ResourceManager。HDFS的web页面只有通过Active的Name
一个简单的通用Makefile实现Makefile是Linux下程序开发的自动化编译工具,一个好的Makefile应该准确的识别编译目标与源文件的依赖关系,并且有着高效的编译效率,即每次重新make时只需要处理那些修改过的文件即可。Makefile拥有很多复杂的功能,这里不可能也没必要一一介绍,为了
Linux内核源码分析方法一、内核源码之我见Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次。如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径。我们都知道,想成为优秀的程序员,需要大量的实践和代码的编写。编程固然重要,但是往往
题记:自从接触到“跳板机”的概念后,一直就被烦不胜烦的机器名,ip地址,用户名,密码折腾的死去活来,心说能有个小精灵随时帮我输入那些重复的登录信息就好了。我见过最挫的方式就是用记事本把一堆机器的ip、登录用户、密码记录下来,每次登录机器就像是一场战斗:打开笔记本 勾选复制 写ssh命令 登录 再打开
统计一下你写过多少代码最近整理了一下自己从开始学习编程以来写过的程序和代码,林林总总,花了不少的时间,最后把一些自认为还算不错的代码提交到github上做一个简单的分类和备份。当然我并不奢求它们能成为多好的开源代码,只是希望通过这种方式分享自己的劳动成果罢了。如果大家有兴趣可以访问我的github,