ループデバイスを表示するにはlosstup -aを使用していますが、長さ制限(62文字)があります。そのため、実際にどのループデバイスが必要なのかを判断することはできません。
前任者:
[root@r7byach]# losetup -a
/dev/loop0: [fc03]:33030504 (/storage5_vol1/6/ABCD116476-linux-ubuntu-10_04-64b-base-07150/*)
/dev/loop1: [0015]:4933 (/storage4/5/ABCD12345-linux-centos-5-64b-base-86836/hdc)
/dev/loop1 を使用して出力を取得できます。
losetup -a|grep diskPath |cut -f1 -d:|cut -f3 -d/
しかし、名前が完全ではないため、Loop0からデバイスをインポートできません。
サイズ制限に関係なくループデバイスを取得する方法は?
答え1
カーネル2.6.37以降、デフォルトファイルの名前を検索してこれを行うことができます(長さ制限なし)/sys/block/loopX/loop/backing_file
。このlosetup
コマンドはutil-linux 2.19以降、この方法をサポートしています。
答え2
最新のカーネル(≥2.6.37)については、以下を参照してください。ピーター・ユーゼルの答え。以前のカーネルでは、これらの長さ制限が暗黙的です。
straceはlosetup -a
名前を得て示しています。LOOP_GET_STATUS
呼び出すioctlloop_get_status_old
、これは以下からデータを取得します。struct loop_info
。このカーネルデータ構造の名前フィールドは、以下に制限されます。LO_NAME_SIZE
= 64バイト。 (loop_get_status64
ともありますが、struct loop_info64
同じ制限があります。)したがって、制限は暗黙的であり、より良いことはできません。
それにもかかわらず、このデータ構造は基本デバイスまたはファイルの元の名前を表示しますが、名前を変更または削除することもできますlosetup
。
たとえば、出力にはファイルのlosetup
ファイルシステム識別子()とinode()が表示されます。st_dev
()で始まる行を見ると、ファイルシステムのブロックデバイスを見つけることができます。次に、そのブロックデバイスのマウントポイントを見つけます。次に、ファイル検索を実行します。はい、複雑です。いいえ、より速い方法はありません。st_ino
[fc03]:33030504
/proc/partitions
252 3
/proc/mounts
find /mount/point -inum 33030504
debugfs
一部のファイルシステムタイプの場合)。