当前位置: 首页 > article >正文

Linux的luks设备上的分区名字的一个现象

在研究Linux使用cryptsetup加密设备时遇到一个现象,很有(e)趣(xin),所以作一个记录。

首先是建立一个luks设备,然后使用命令cryptsetup luksOpen /dev/sde crypt-test挂载到/dev/mapper/crypt-test设备上,

然后使用parted建立分区,完成之后执行fdsk -l可以看到分区的设备名是/dev/mapper/crypt-test1和/dev/mapper/crypt-test。

fdisk -l|grep "/dev/mapper/crypt-test"
/dev/mapper/crypt-test1   2048  976895  974848  476M Linux filesystem
/dev/mapper/crypt-test2 976896 2095103 1118208  546M Linux filesystem

然后正常使用,没有问题。

直到有一次想在SNAP应用里访问这两个分区,问题来了:找不到设备!检查代码无果,只好在SNAP应用里加了fdisk -l|grep "/dev/mapper/crypt-test"命令,发现分区设备的名字变了,变成下面这样了:

/dev/mapper/crypt-test1   2048  976895  974848  476M Linux filesystem
/dev/mapper/crypt-test2 976896 2095103 1118208  546M Linux filesystem

难怪找不到。

最初以为是什么地方没初始化对,反复修改,挂载,重启,现象不变。在反复重启之后有一次我忘了执行partprobe就用fdisk查看设备名,发现跟SNAP应用里得到的结果居然是一样的,在执行partprobe之后,就变成正常的/dev/mapper/crypt-test1和/dev/mapper/crypt-test2了。

估计是分区挂载之后设备管理器修正了名字,但SNAP里运行环境是挂载之前的。只不过没时间看源代码,所以真正的原因也不清楚。只是做了一个脚本来处理这个问题。

dev='/dev/mapper/crypt-test' #宿主设备名
partfix='' #分区名前缀,如果宿主设备结尾是数字,就是p,如果不是数字,就是''
for i in `fdisk -l|awk '{print $1}'|grep $dev|sed "s#$dev##"`;do #遍历设备并且去掉分区设备前面的磁盘设备名
    a=$dev$i; #/dev/xxxp1或者/dev/xxx1
    b=$dev`echo $i|sed "s@^$partfix@-part@"`; #/dev/xxx-part1
    for x in `ls $dev*`;do #列出宿主设备下的所有子(分区)设备名
        if [ "$x" = "$b" ];then #跟-partindex形式匹配,用/dev/xxxx-partindex形式
            echo $b;
            a='';
            b='';
        else
            if [ "$x" = "$a" ];then #跟fdisk列出的名字匹配,用这个
                echo $a;
                a='';
                b='';
            fi;
        fi;
    done;
done

现在好了,不论设备名是哪种表现形式,都能取得正确的名字供使用了。


http://www.kler.cn/news/304636.html

相关文章:

  • Docker镜像下载-使用github action- 解决无法下载docker镜像的问题
  • Apache Spark Streaming技术深度解析
  • IP core 在硬件上实现的流程
  • Linux环境使用Git同步教程
  • 软考中项(第三版) 项目成本管理总结
  • IP-Adapter学习
  • a-table 定时平滑轮播组件
  • 目标检测从入门到精通——数据增强方法总结
  • HTB-Unified(log4j2漏洞、MongoDb替换管理员密码)
  • webpack 配置
  • Docker 网络基本概念
  • 判断2个excel文件差异的条数
  • MySQL聚合统计
  • vue等比例缩放页面用于网站,官网
  • CAN数据记录仪与乘用车或者工程车辆OBD口连接注意事项
  • 演示:基于WPF的自绘的中国地铁轨道控件
  • [docker]入门
  • 【H2O2|全栈】关于CSS(4)CSS基础(四)
  • Java 算法:随机抽题
  • 最小堆 + 数学思维(重点) + 快速幂
  • java 自定义简单的线程池
  • Mysql 视图存储过程触发器
  • GD - GD32350R_EVAL - PWM实验和验证3 - EmbeddedBuilder - 无源蜂鸣器 - 用PMOS来控制
  • Android CustomDialog圆角背景不生效的问题
  • 使用 PyCharm 新建 Python 项目详解
  • turbo译码算法MAX, MAX_SCALE and MAX_STAR的比较
  • C 语言中表示对象大小的标准数据类型size_t
  • 备份服务器数据防护策略方法
  • 基于SpringBoot的在线汽车租赁信息管理系统
  • 【Java面试】第十一天