Shell-Script
當您只知道一個目錄時,如何定位一個或多個底層磁碟?
假設我有一些設備安裝到
/backups
. 我正在將選定的文件從系統複製到備份,我想減少設備發出的噪音。我知道我可以hdparm -M
用來調整設備的“自動聲學管理 (AAM)”設置。但是,我不知道應該如何/dev/sdc
從給定目錄中獲取設備(例如 )(例如,如果我有一個腳本將最新的備份位置計算為/backups/2017/12/31
)。我能做的最好的就是
echo /dev/$(lsblk -no pkname $(findmnt -nvoSOURCE -T "$DIRECTORY"))
但這需要硬編碼
/dev/
前綴並假設只有一個支持磁碟。如何使這更穩定?請注意,這個問題專門關於定位正確的磁碟,而不是分區。如果您只需要找到正確的分區
df
或findmnt
就足夠了。另請注意,如果目錄安裝在
md
設備上,則父設備將類似於md0
不能與hdparm
. 在這種情況下,將有多個基礎磁碟,因此實際上這個問題是關於將單個文件或目錄映射到一個或多個磁碟。
這種腳本似乎最穩定(適用於單個 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