web-dev-qa-db-ja.com

GNU / Linux:ハードディスクマッピングを検出する方法は?

2つのハードディスクがあるとしましょう。

  • 1つの内部(GNU/Linux(Debian)を起動します);

  • 1つの外部(USB)。

fdisk -lは両方を検出しますが、どちらが/dev/sdaで、どちらが/dev/sdbであるかはわかりません。 lsusbは、外部USBデバイスが接続されていることを通知しますが、それが/dev/sdaまたは/dev/sdbにマップされているかどうかは通知しません。

システムからそのような情報をどのように取得できますか?

3
Elena
ls -l /sys/class/block/sd?

sd?エントリは、ディスクがコンピュータに接続されている方法を示すシンボリックリンクです。 USBディスク用の/usbがあります。

udevadm info -a -n sda

これは、カーネルがsdaに対して直接取得できるすべての識別情報を示しています。ディスクがどのように接続されているかが詳しくわかります。 Intelコントローラー上のSATAディスクの場合はSUBSYSTEMS=="scsi"からSUBSYSTEMS=="pci", DRIVERS=="ahci"に直接移動するか、USBディスクの場合はSUBSYSTEMS=="scsi"からSUBSYSTEMS=="usb", DRIVERS=="usb-storage"に移動します。

ls -l /dev/disk/by-*

/dev/disk/by-*の下で、ハードウェア接続(by-path)、グローバル一意識別子(by-uuid)、人間が選択したラベル(by-label)、またはによってディスクを見つけることができます。メーカーID(by-id)。

私のDebianボックス(現在はLubuntu)では、この目的のためにtestdisk -l(read: 'minus small L')をよく使用していました。 。すべてのディストリビューションにtestdisk(よく知られたリカバリツール)がプリインストールされているわけではないことは承知していますが、ほとんどのディストリビューションにはプリインストールされているはずです。

私が少し前に学んだもう1つの優れたツールは、lsblkです。

$ lsblk -d -io KNAME,TYPE,SIZE,MODEL

または、HDDのみを表示したい場合:

$ lsblk -d -io KNAME,TYPE,SIZE,MODEL | grep 'sd\w'

(\ wは、必須ではありませんが、デフォルト構成でgrepgrep --color=autoにエイリアスされているディストリビューションでの醜い「半色」出力を回避します。)

私の(実際には非常に複雑な)スクリプトを使用して、この1つの小さな目的だけを果たすためにトリミングすることにしました。

https://serverfault.com/questions/64219/how-to-know-which-block-device-maps-to-which-physical-drive/548795#548795

4
syntaxerror

多くの場合、最も速いのは/proc/scsi/scsiを猫にすることです。これは、どれがどれであるかを示すのに十分です。

$ cat /proc/scsi/scsi 
Attached devices:
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST95005620AS     Rev: SD23
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi4 Channel: 00 Id: 00 Lun: 00
  Vendor: 2.0      Model: USB Flash Drive  Rev: 1.00
  Type:   Direct-Access                    ANSI  SCSI revision: 02

したがって、私の場合、最初の(sda)はSeagate ST95005620ASであり、2番目の(sdb)はUSBフラッシュドライブです。

より詳細で具体的な情報を入手するには、/sys/block/sda/sys/block/sdb、および/sys/class/scsi_diskを調べてください。

/sys/class/scsi_diskには、特にPCIアドレスツリーへのシンボリックリンクが含まれており、USBホストとSATAホストが表示されます。

$ ls -l /sys/class/scsi_disk
total 0
lrwxrwxrwx 1 root root 0 2012-02-28 23:50 2:0:0:0 -> ../../devices/pci0000:00/0000:00:1f.2/Host2/target2:0:0/2:0:0:0/scsi_disk/2:0:0:0
lrwxrwxrwx 1 root root 0 2012-02-28 23:50 4:0:0:0 -> ../../devices/pci0000:00/0000:00:1d.7/usb1/1-8/1-8:1.0/Host4/target4:0:0/4:0:0:0/scsi_disk/4:0:0:0
$ cat /sys/block/sd[ab]/device/model
ST95005620AS    
USB Flash Drive 

詳細については、find /sys -name 'scsi*'およびfind /sys/block/sd[a-z]/も試してください。

3
R Perrin

最良の答えはわかりませんが、いくつかのアイデアがあります。

/sys/class/block/sdX/device/modelを見ると、デバイスによって報告されたメーカー/モデル情報を取得できます。例えば:

cat /sys/class/block/sda/device/model 
SAMSUNG HD161GJ

これだけで、どちらが外部デバイスで、どちらが内部デバイスであるかを識別するのに十分な場合があります。 dmesgからの出力を見ることができます。これには、USBデバイスの場合は次のようなものが含まれます。

[ 2073.412999] scsi12 : usb-storage 2-1.8:1.0

これは、SCSIバス12をUSBストレージバスとして識別します。次に、バス12でSCSIデバイスを探すことができます。

# dmesg | grep scsi12
[ 2074.488651] sd 12:0:0:0: Attached scsi generic sg6 type 0
[ 2076.592154] sd 12:0:0:0: [sdf] 30481152 512-byte logical blocks: (15.6 GB/14.5 GiB)
[ 2076.592639] sd 12:0:0:0: [sdf] Write Protect is off
[ 2076.592645] sd 12:0:0:0: [sdf] Mode Sense: 23 00 00 00
[ 2076.593142] sd 12:0:0:0: [sdf] No Caching mode page present
[ 2076.593147] sd 12:0:0:0: [sdf] Assuming drive cache: write through
[ 2076.596270] sd 12:0:0:0: [sdf] No Caching mode page present
[ 2076.596276] sd 12:0:0:0: [sdf] Assuming drive cache: write through
[ 2076.619078] sd 12:0:0:0: [sdf] No Caching mode page present
[ 2076.619084] sd 12:0:0:0: [sdf] Assuming drive cache: write through
[ 2076.619088] sd 12:0:0:0: [sdf] Attached SCSI removable disk
3
larsks

Gillesの答えが一番だと思いますが、完全を期すためにこれを追加します。

hdparm -i /dev/sda

これにより、コントローラードライバーがドライブから取得した基本情報(モデルとシリアル番号を含む)が表示されます。 /devデバイスへの読み取りアクセス権がある場合(グループ権限など)、このコマンドはrootを必要としません。

hdparm -I /dev/sda

これにより、ドライブに関する大量の高度な情報(モデル、シリアル番号、および可能なすべてのもの)が表示されます。このコマンドにはrootが必要です。

2
Patrick

このような状況で私が通常使用する2つのコマンドは、lsblkblkidです。前者は、各ディスクブロックデバイスに、パーティション、サイズ、マウントポイント(マウントされている場合)のリストを出力します(ボリュームラベルが存在する場合は、ボリュームラベルが存在する場合もありますが、現時点ではボリュームラベルが接続されているデバイスはありません。これを確認してください)。後者は、ファイルシステムタイプ、UUID、およびボリュームラベル(存在する場合)とともに各パーティションを出力します。

mountは、各デバイスがマウントされている場所も示します。したがって、ファイルシステムのルートにマウントされているデバイスがブートデバイスです。内蔵ハードドライブも外付けハードドライブの前に列挙されると思うので、/dev/sdaは内蔵ハードドライブである必要があります。

1
Micheal Johnson