ディレクトリだけを知っている場合は、1つ以上のプライマリディスクをどのように見つけますか?

ディレクトリだけを知っている場合は、1つ以上のプライマリディスクをどのように見つけますか?

に一部のデバイスがマウントされているとします/backups。システムで選択したファイルをバックアップにコピーしており、デバイスで発生するノイズを減らしたいと思います。hdparm -M本機の「自動サウンド管理(AAM)」設定を調整するために使用できることがわかります。ただし、特定のディレクトリ/dev/sdc(たとえば、最新のバックアップ場所を計算するスクリプトがある場合/backups/2017/12/31)からデバイス(たとえば)をどのようにインポートするのかわかりません。

私ができること

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

ただし、これにはハードコーディングされた/dev/プレフィックスが必要で、バックアップディスクが1つしかないとします。どうすればこれをより安定的にすることができますか?

この質問は、特にパーティションではなく正しいディスクを見つけることについてです。正しいパーティションを見つければ十分ですdffindmnt

また、ディレクトリがデバイスにマウントされている場合、親デバイスは互換性のないデバイスmdと同じです。この場合、基本ディスクが複数あるので、実際には、この質問は、単一のファイルまたはディレクトリを1つまたは複数のディスクにマップすることです。 。md0hdparm

答え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

関連情報