ファイルがどのデバイスにあるのかを知る方法はありますか?

ファイルがどのデバイスにあるのかを知る方法はありますか?

ファイルがある場合、/abc/def/ghi/jklそのファイルがどのデバイスにあるかを知る方法はありますか?それともファイルを分析して、/etc/mtabどちらが/abc/def/ghi/jklより一致しているかを確認する必要がありますか?

答え1

dfはデバイス名とマウントポイントを示し、lsはデバイス番号を示します。

paul $ pwd
/home/paul/SandBox/Toys/hSort
paul $ ls -l ReadMe
-rw-r--r-- 1 paul paul 296 Jan  8  2020 ReadMe

paul $ df ReadMe
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda9      103818480 3796556  94725184   4% /home

paul $ ls -l /dev/sda9
brw-rw---- 1 root disk 8, 9 Jul 12 12:10 /dev/sda9

答え2

Linuxでは、以下を実行できますfindmntマンページ)ファイルパス:

findmnt -T /abc/def/ghi/jkl

出力を解析できないため、列(この場合はSOURCE)の結果を変数として読み取るには、次のようにします。

source=$(findmnt -rno SOURCE -T /abc/def/ghi/jkl)

$sourceこのパスは、常にネットワークまたはヒューズファイルシステム、tmpfsなどのブロックデバイスファイルへのパスではない可能性があります。)

答え3

いくつかありますが、どのツールを使用できるかによって異なります。あなたはシェルにいますか?スクリプトやプログラムを書いていますか?どの言語で?

これstat()機能指定されたファイルのデバイス識別子を返します。

コマンドも同じですstat(1)stat -c %D filenameスクリプトで使用することもできます。たとえば、

stat -c %D /mnt/persistent/test

「0821」を提供します。これは、デバイス8、サブデバイス33(「21」は16進数で33)を意味します。これにより、/devどのデバイスに数字8、33があるかを確認できます。

ls -l /dev | grep " 8, *33 "
brw-rw---- 1 root disk      8,  33 Jun 28 19:08 sdc1

それ以外の場合は、realpathmtabを使用して一致させます。同じ例では:

REALPATH="$( realpath /mnt/persistent/test )"
df | grep ^/ | tr -s " " \
| while read row; do 
    PREFIX=$( echo "$row" | cut -f 6 -d " " )
    if ( echo "$REALPATH" | grep ^$PREFIX > /dev/null ); then
        echo "$row" | cut -f 1 -d " "
    fi
 done | sort | tail -n 1

以下を出力します。

 /dev/sdc1

@Freddyが指摘したように、スクリプト全体はdfそれ自身の構文の後に非常に正しく表示されません。

df --output=source /mnt/persistent/test | tail -n1

答え4

statあなたの友人ですか? 「デバイス」フィールドは、ファイルがどのデバイスにあるかを示します。読むこれデバイスフィールドの解釈方法に関する追加情報。

関連情報