![GNU/Linux:如何检测硬盘映射?](https://linux22.com/image/21201/GNU%2FLinux%EF%BC%9A%E5%A6%82%E4%BD%95%E6%A3%80%E6%B5%8B%E7%A1%AC%E7%9B%98%E6%98%A0%E5%B0%84%EF%BC%9F.png)
假设您有两个硬盘:
一个内部的(启动 GNU/Linux (Debian));
一个外部 (USB)。
fdisk -l
检测两者,但不会告诉您哪个是/dev/sda
,哪个是/dev/sdb
。lsusb
会告诉您有一个外部 USB 设备已连接,但不会告诉您它是否已映射到/dev/sda
或/dev/sdb
。
您如何从系统中获取此类信息?
答案1
ls -l /sys/class/block/sd?
这些sd?
条目是显示磁盘如何连接到计算机的符号链接。/usb
里面会有一个 USB 磁盘。
udevadm info -a -n sda
这显示了内核可以直接获取的所有标识信息sda
。您将更详细地了解磁盘的连接方式,例如,对于 Intel 控制器上的 SATA 磁盘,直接从SUBSYSTEMS=="scsi"
到;对于 USB 磁盘,从到。SUBSYSTEMS=="pci", DRIVERS=="ahci"
SUBSYSTEMS=="scsi"
SUBSYSTEMS=="usb", DRIVERS=="usb-storage"
ls -l /dev/disk/by-*
在 下/dev/disk/by-*
,您可以通过硬件附件 ( by-path
)、某些全局唯一标识符 ( by-uuid
)、人工选择的标签 ( by-label
) 或制造商标识 ( by-id
) 来定位磁盘。
答案2
在我的 Debian 机器上(现在在 Lubuntu 上),我经常使用testdisk -l
(读:“减去小L”)以此目的。我知道并不是每个发行版都testdisk
预装了(众所周知的恢复工具),但大多数发行版都应该有它。
我不久前学到的另一个很棒的工具是lsblk
:
$ lsblk -d -io KNAME,TYPE,SIZE,MODEL
或者,如果您只想让 HDD 显示:
$ lsblk -d -io KNAME,TYPE,SIZE,MODEL | grep 'sd\w'
grep
( \w 虽然不是强制性的,但将避免在默认配置中别名为的发行版上出现丑陋的“半色”输出grep --color=auto
。)
您也可以使用我的(实际上非常复杂的)脚本,我决定对其进行精简以仅用于这一小目的:
答案3
我不确定最佳答案,但这里有一些想法:
您可以查看/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
答案4
我认为吉尔斯的答案是最好的,但我添加这个答案只是为了完整性。
hdparm -i /dev/sda
这将向您显示控制器驱动程序从驱动器获取的一些基本信息(包括型号和序列号)。如果您具有/dev
设备的读取访问权限(例如通过组权限),则此命令不需要 root 。
hdparm -I /dev/sda
这将向您显示有关驱动器的大量高级信息(型号、序列号以及所有可能的信息)。此命令需要 root 权限。