当你只知道一个目录时,如何定位一个或多个底层磁盘?

当你只知道一个目录时,如何定位一个或多个底层磁盘?

假设我有一些设备安装到/backups.我正在将选定的文件从系统复制到备份,并且我想减少设备产生的噪音。我知道我可以用来hdparm -M调整设备的“自动声音管理(AAM)”设置。但是,我不知道应该如何从给定目录获取设备(例如/dev/sdc)(例如,如果我有一个将最新备份位置计算为 的脚本/backups/2017/12/31)。

我能做的就是

echo /dev/$(lsblk -no pkname $(findmnt -nvoSOURCE -T "$DIRECTORY"))

但这需要硬编码/dev/前缀并假设只有一个备份磁盘。如何让这个更稳定?

请注意,这个问题专门针对查找正确的磁盘,而不是分区。如果您只需要找到正确的分区dffindmnt就足够了。

另请注意,如果在md设备上安装了目录,则父设备将类似于md0无法与hdparm.在这种情况下,将会有多个底层磁盘,因此实际上这个问题是关于将单个文件或目录映射到一个或多个磁盘。

答案1

这种脚本似乎是最稳定的(适用于单个 SATA 磁盘和软件 raid):

 lsblk --list -no type,name --inverse $(findmnt -nvoSOURCE -T "$DIRECTORY") \
 | grep ^disk | awk '{ print $2 }' | sort -u \
 | while read name; do echo "Data on /dev/$name"; done

当然,请将echo命令替换为您要对每个磁盘执行的实际操作。

4 磁盘 MD 软件 raid 上的目录输出示例:

Data on /dev/sda
Data on /dev/sdb
Data on /dev/sdc
Data on /dev/sdd

1 个磁盘常规分区上的目录输出示例:

Data on /dev/sdf

答案2

一个简单的了解方法是使用df文件夹的(绝对)路径调用:

$ df $DIRECTORY
file system    1K-blocks used     available used% mounted at
/dev/sda1      303538544 74465700 213630924   26% /root/of/variable/DIRECTORY

相关内容