Linuxマシンに接続されているすべてのストレージデバイスを検索する[終了]


109

マウントされているかどうかに関係なく、特定のマシンに接続されているすべての書き込み可能なストレージデバイスを見つける必要があります。

これを行う方法は、書き込み可能なデバイスに対応するすべてのエントリを試す/devことです(hd* and sd*)......

より良い解決策はありますか、それともこれに固執するべきですか?


libsysfsを使用します。これは、あらゆる種類の接続されたデバイスについてカーネルに問い合わせる推奨方法です。
デビッドシュミット

マウントされている可能性があることを話しているので、ディスクだけでなくパーティションのリストが必要ですか?
Mark Ba​​ker、

パーティションも問題ありません、はい:) ..パーティションがわかっている場合は、使用可能な物理デバイスもわかります
warren

2
以降のUnix&Linuxは利用可能になりました、この質問がそこに移行する必要があります
ウォーレン

3
@ウォーレン-いやいや。彼らはまだ閉鎖されるべきです。あなたは投稿の所有者としてこれを移動したいので、モデレーターの注意のためにフラグを立てるべきです。あなたがそれを動かしたいという事実は、いくらかの重荷を運ぶでしょう。
ChrisF

回答:


79

/proc/partitionsシステムが認識するすべてのブロックデバイスとパーティションが一覧表示されます。次に、を使用file -s <device>して、パーティションに存在するファイルシステムの種類を判別します。


4
これにより、たとえばCD / DVDドライブが省略されます(通常、これらのドライブは書き込み不可であることを知っています)
pixelbeat 2008年

シェルから何ができるかには制限があります。より高い評価のその他の提案のほとんどは、シェルからは機能しないか、dbusが実行されていないと機能しないか、実際には存在または構成されていないデバイスを一覧表示します。これは、すべての/ devデバイスをチェックするよりも高速です。
スティーブベイカー、

5
これはlsblkのほうがいい
emj365 '10

1
/ proc / partitionsはCygwinのドライブ文字も提供します。
katriel

72

fdisk -lEC2 xvdaデバイスなどの奇妙なセットアップでも、かなりうまくいくように見えることはいつでもできます。

以下は、m1.largeインスタンスのダンプです。

root@ip-10-126-247-82:~# fdisk -l

Disk /dev/xvda1: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda1 doesn't contain a valid partition table

Disk /dev/xvda2: 365.0 GB, 365041287168 bytes
255 heads, 63 sectors/track, 44380 cylinders, total 712971264 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda2 doesn't contain a valid partition table

Disk /dev/xvda3: 939 MB, 939524096 bytes
255 heads, 63 sectors/track, 114 cylinders, total 1835008 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda3 doesn't contain a valid partition table

ながらmount言う:

root@ip-10-126-247-82:~# mount
/dev/xvda1 on / type ext4 (rw)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/xvda2 on /mnt type ext3 (rw)

そして/proc/partitions言う:

root@ip-10-126-247-82:~# cat /proc/partitions
major minor  #blocks  name

 202        1   10485760 xvda1
 202        2  356485632 xvda2
 202        3     917504 xvda3

サイドノート

どのようにfdisk -l機能するかは、自分自身を知りたいです。


9
どのようにfdisk -l動作するかを確認したかどうかはわかりませんが、私はあなたが知りたいと思ったと思います。sysfs内のデバイスの真のreprへのシンボリックリンクのセットを含むそれを読み取り/proc/partitions、次に反復し/sys/dev/block/*ます。あなたは実行してこの情報を見つけることができますfdiskstrace:)

1
すごい!ありがとう。(OT:この質問がロックされていることを確認するために吸います。「ロックを元に戻す投票」ボタンがあるはずです)。
Maxim Veksler、2013

1
3K担当者以上のユーザー向けです(「再開」ボタン)。

まあ、本当に?それから私はできるだけ早く3kに到達しなければなりません。
Maxim Veksler、2013

ええ、権限のページで、もっと多くの担当者ができることの完全なリストをご覧ください

35

あなたはlsblkを試すこともできます... util-linuxにあります...しかし私も質問があります

fdisk -l /dev/sdl

検索結果はありません

grep sdl /proc/partitions      
   8      176   15632384 sdl
   8      177   15628288 sdl1

lsblk | grep sdl
sdl       8:176  1  14.9G  0 disk  
`-sdl1    8:177  1  14.9G  0 part  

fdiskは良いですが、それほど良くはありません...

私の特定の例では、カードリーダーも組み込まれているスティックがあり、fdiskを使用してスティックのみを表示できます。

fdisk -l /dev/sdk

Disk /dev/sdk: 15.9 GB, 15931539456 bytes
255 heads, 63 sectors/track, 1936 cylinders, total 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xbe24be24

   Device Boot      Start         End      Blocks   Id  System
/dev/sdk1   *        8192    31116287    15554048    c  W95 FAT32 (LBA)

カードではない(カードは/ dev / sdl)

また、file -sは非効率的です...

file -s /dev/sdl1
/dev/sdl1: sticky x86 boot sector, code offset 0x52, OEM-ID "NTFS    ", sectors/cluster 8, reserved sectors 0, Media descriptor 0xf8, heads 255, hidden sectors 8192, dos < 4.0 BootSector (0x0)

それはいいです...しかし

fdisk -l /dev/sdb
/dev/sdb1            2048   156301487    78149720   fd  Linux raid autodetect
/dev/sdb2       156301488   160086527     1892520   82  Linux swap / Solaris

file -s /dev/sdb1
/dev/sdb1: sticky \0

fdiskでアクセスできないディスクに関する情報を表示するには、partedを使用できます。

parted /dev/sdl print

Model: Mass Storage Device (scsi)
Disk /dev/sdl: 16.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  16.0GB  16.0GB  primary  ntfs




arted /dev/sdb print 
Model: ATA Maxtor 6Y080P0 (scsi)
Disk /dev/sdb: 82.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  80.0GB  80.0GB  primary                  raid
 2      80.0GB  82.0GB  1938MB  primary  linux-swap(v1)

9

ls /sys/block


パーティションは表示されません。それが最初の質問が望んでいたものかどうかはわかりません。
Mark Ba​​ker、

1
/ sys / blockについては知りませんでしたが、DVDドライブなど、書き込みできないデバイスも表示されます
warren

1
実際、パーティションはリストされていません-サブディレクトリをチェックして、「dev」、「stat」、「uevent」という名前の最小ファイルを保持するすべてのサブディレクトリと、「holders」という名前のサブディレクトリを探すことができます。DVDは今でもストレージクラスのデバイスです:)
Mihai Limbășan 2008年

3
もーちゃ、答えを少し広げてみませんか?
SpoonMeiser 2008年

2
@warren-おそらく/ dev / dvdは/ dev / sd *または/ dev / hd *デバイスのエイリアスになるだけなので、とにかくこの問題が発生するでしょう。
SpoonMeiser 2008年

7

HALの使用(カーネル2.6.17以降):


#! /bin/bash
hal-find-by-property --key volume.fsusage --string filesystem |
while read udi ; do
    # ignore optical discs
    if [[ "$(hal-get-property --udi $udi --key volume.is_disc)" == "false" ]]; then
        dev=$(hal-get-property --udi $udi --key block.device)   
        fs=$(hal-get-property --udi $udi --key volume.fstype) 
        echo $dev": "$fs
    fi 
done

4

最新のLinuxシステムでは、通常、存在するデバイスの/ devにのみエントリがあるため、提案されているとおりにhda *とsda *を実行すると、かなりうまくいきます。

それ以外の場合は、/ procに使用できるものがある可能性があります。ざっと見てみると、/ proc / partitionsは必要なことを実行できるように見えます。


2

libsysfsは潜在的に有用に見えますが、シェルスクリプトから直接ではありません。systoolと呼ばれる、あなたがやりたいことを実行するプログラムが付属していますが、別のプログラムを使用してそれを行うよりも/ sysを直接調べる方が簡単な場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.