还记得我在拯救造富机上的宝贵数据所费的周折吗?先是用dd
指令读取出整个磁盘的数据到文件,然后用losetup
绑定到loop设备,然后再mount
到磁盘目录,超级麻烦。
(图源 :pixabay)
而这个环节最容易出错的是losetup
计算偏移量的问题,稍有不慎就会翻车。就好比我,明明小学已经毕业了,还弄错了好几次。
那么在已经成功读取数据到文件之后,有没有什么相对简单的方法去绑定呢?按说计算机这么先进,应该可以自动计算便宜量啊,怎么还要我去那计算器程序算一遍呢?
使用kpartx
功夫不负有心人,经过O哥一番努力,还真找到了一个工具(Linux系统自带哦),那就是kpartx
。
现在就让我们一起来学习如何使用kpartx
组合mount
,来实现镜像文件中数据的读取操作吧(写入也可以哦)。
介绍
kpartx的介绍信息:
kpartx - Create device maps from partition tables.
更详细的描述:
This tool, derived from util-linux' partx, reads partition tables on specified device and create device maps over partitions segments detected. It is called from hotplug upon device maps creation and deletion.
简单来讲就可以可以通过读取指定设备(文件也是一种设备哦_上的分区表并在检测到的分区段上创建设备映射。有关详细的介绍和使用信息可以通过man kpartx
获得。
我们可以直接输入指令来查看简版的使用信息:
kpartx
信息如下:
使用
所以可以可以通过如下指令来给我的镜像文件创建设备映射:
sudo kpartx -v -a /lv_main/test/image
创建成功后返回信息如下:
这时我们其实是可以通过sudo fdisk -l
看到设备:
但是我尝试直接mount指定分区时,却出错了,mount指令如下:
sudo mount /dev/loop7p2 media
然后竟然提示这样的错误:
mount: /home/xxxx1234/media: special device /dev/loop7p2 does not exist.
(研究了半天还是没理解为啥会这样,果断放弃)
正确的挂载方式是这样:
ls -l /dev/mapper/*
返回如下信息:
其中/dev/mapper/loop7p1
和/dev/mapper/loop7p2
,就是我image文件中的两个分区(启动分区和数据分区)啦。
现在再试试mount
相应的分区,拿启动分区试试:
sudo mount /dev/mapper/loop7p1 media
一下子就成功啦,然后再去看看里边的数据:
不管你能不能看懂这是什么,反正我是看不懂的啦,哈哈哈。
再EFI目录下写个文件试试看:
sudo touch O哥到此一游
sudo umount media
,再次mount
,然后再次查看:
哈哈,所以O哥变成了真正的数字人,穿越到目录里边去了呢。
解除设备映射
当我们完成相应的工作之后,应该解除设备映射,指令如下:
sudo kpartx -v -d /lv_main/test/image
显示信息如下:
重新学习losetup
在学习kpartx
又多少去了解一下losetup
,为了和kpartx
做一些对比,突出kpartx
的优越性,结果发现其实losetup
也能这样做,且更简单。
先上帮助信息losetup --help
所以这个-f
和-P
加上--show
就会是我们的救星,来测试一下:
sudo losetup -f -P --show /lv_main/test/image
输出/dev/loop7
,sudo fdisk -l /dev/loop7
看一眼:
怎么和之前kpartx创建映射后效果差不多呢?这次我在试试直接绑定/dev/loop7p2
:
sudo mount /dev/loop7p2 media
它竟然,它竟然直接成功了,让我来看看数据:
这就有点尴尬了,所以我之前折腾那么久计算偏移量,以及有折腾这么久来学习和测试kpartx
是为了啥?
好吧,有道是技多不压身,就好比武林高手无论是十八般兵器中的那一样都能耍耍不说,且能拿起来御敌制胜,所以O哥也要像高手们学习呀。
嗯,只能如此安慰自己才不枉自己辛苦一场呀。
哦,对了,补充一下解除操作:
sudo umount media
sudo losetup -d /dev/loop7
👍👍
我有点好奇O哥的智商是不是在150以上,真心佩服。
要是智商真那么高,就不会总犯低级错误啦
您谦虚了!!🙃
咱们的O哥太优秀啦!棒棒哒!我们都是你忠实的fans!🤩
@tipu curate 3
Upvoted 👌 (Mana: 23/63) Liquid rewards.