每天进步一点点:学习使用kpartx & losetup

in HIVE CN 中文社区21 hours ago

还记得我在拯救造富机上的宝贵数据所费的周折吗?先是用dd指令读取出整个磁盘的数据到文件,然后用losetup绑定到loop设备,然后再mount到磁盘目录,超级麻烦。

image.png
(图源 :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

信息如下:
1732017312564.png

使用

所以可以可以通过如下指令来给我的镜像文件创建设备映射:

sudo kpartx -v -a /lv_main/test/image

创建成功后返回信息如下:
1732017409226.png

这时我们其实是可以通过sudo fdisk -l看到设备:
1732017526279.png

但是我尝试直接mount指定分区时,却出错了,mount指令如下:

sudo mount /dev/loop7p2 media

然后竟然提示这样的错误:

mount: /home/xxxx1234/media: special device /dev/loop7p2 does not exist.

研究了半天还是没理解为啥会这样,果断放弃

正确的挂载方式是这样:

ls -l /dev/mapper/*

返回如下信息:
1732018520050.png

其中/dev/mapper/loop7p1/dev/mapper/loop7p2,就是我image文件中的两个分区(启动分区和数据分区)啦。

现在再试试mount相应的分区,拿启动分区试试:

sudo mount /dev/mapper/loop7p1 media

一下子就成功啦,然后再去看看里边的数据:
image.png

不管你能不能看懂这是什么,反正我是看不懂的啦,哈哈哈。

再EFI目录下写个文件试试看:

sudo touch O哥到此一游

sudo umount media,再次mount,然后再次查看:
1732026871794.png

哈哈,所以O哥变成了真正的数字人,穿越到目录里边去了呢。

解除设备映射

当我们完成相应的工作之后,应该解除设备映射,指令如下:
sudo kpartx -v -d /lv_main/test/image

显示信息如下:
image.png

重新学习losetup

在学习kpartx又多少去了解一下losetup,为了和kpartx做一些对比,突出kpartx的优越性,结果发现其实losetup也能这样做,且更简单。

先上帮助信息losetup --help

image.png

所以这个-f-P加上--show就会是我们的救星,来测试一下:

sudo losetup -f -P --show /lv_main/test/image

输出/dev/loop7sudo fdisk -l /dev/loop7看一眼:
1732028019087.png

怎么和之前kpartx创建映射后效果差不多呢?这次我在试试直接绑定/dev/loop7p2:

sudo mount /dev/loop7p2 media

它竟然,它竟然直接成功了,让我来看看数据:
1732028245872.png

这就有点尴尬了,所以我之前折腾那么久计算偏移量,以及有折腾这么久来学习和测试kpartx是为了啥?

好吧,有道是技多不压身,就好比武林高手无论是十八般兵器中的那一样都能耍耍不说,且能拿起来御敌制胜,所以O哥也要像高手们学习呀。

嗯,只能如此安慰自己才不枉自己辛苦一场呀。

哦,对了,补充一下解除操作:

sudo umount media
sudo losetup -d /dev/loop7

相关链接

Sort:  

我有点好奇O哥的智商是不是在150以上,真心佩服。

要是智商真那么高,就不会总犯低级错误啦

您谦虚了!!🙃

咱们的O哥太优秀啦!棒棒哒!我们都是你忠实的fans!🤩
@tipu curate 3