通过 USB 启动机器时,
sudo fdisk -l
输出两个标有星号的设备,您永远不会知道哪个是启动设备。
我需要当前机器上所有磁盘的列表
sed -ne 's/.*\([sh]d[a-zA-Z]\+$\)/\/dev\/\1/p' /proc/partitions
是一个很好的方法,它输出
/dev/sda
/dev/sdb
这确实给了我一个线索,即哪个是启动设备,这很重要,因为想要从一个设备启动并安全删除另一个设备 - 自动(插入、启动、让它运行......)因为我同时在一组机器上执行此操作,确保客户计算机硬盘上没有残留任何数据。
awk '$2 == "/"' /proc/self/mounts
这会为您提供 UUID 号码 - 但如何找到/dev/sd?
它的归属?
(关于“使用 UUID”的提示没有帮助 - 我不想重新配置系统,我想清理它。当然,我可以在执行此操作时分配新的 UUID,这需要一秒钟,但这绝对不是目标,并且仍然忽略了我不知道/dev/sd?
要给哪个设备一个新的事实。)
dban
完成了工作,但将来将不能免费使用。
答案1
您的调用几乎已经完成awk
。只需进行一些小调整即可。
awk '$1 ~ /^\/dev\// && $2 == "/" { print $1 }' /proc/self/mounts
该$1 ~ /^\/dev\//
部分要求任何令人满意的行都在 /dev 下的某个位置命名设备。现在我们需要的是从设备 UUID 名称到内核分配的名称的映射,这很容易,因为列出的所有名称要么直接是该名称,要么(最终)是指向该名称的符号链接,因此我们可以像ls -l
这样感觉它们:
ls -l $(awk '$1 ~ /^\/dev\// && $2 == "/" { print $1 }' /proc/self/mounts)
这将为您提供一行输出,告诉您根文件系统当前是从哪个物理设备挂载的。它并不是万无一失的,所以我不会仅凭这一点就自动执行任何可能造成破坏的操作,但对于只是想要知道指向哪个设备的人来说,这应该足够了。
答案2
您应该找到您的/
安装位置。
findmnt -n / | awk '{ print $2 }'
假设您得到的结果是/dev/sda1
。使用它来查找父设备:
lsblk -no pkname /dev/sda1
这样你应该可以得到。如果需要,sda
你可以在前面加上。/dev/
不知道这有多万无一失。但这可能比这回答。