Cách tốt nhất để có được thông tin về các ổ đĩa hiện tại là gì?


38

Đầu tiên, tình huống: Tôi đã có một máy tính Linux có hai khoang ổ đĩa eSATA chấp nhận các ổ SSD di động. Tôi đang cố gắng viết một ứng dụng GUI nhỏ để người dùng dễ dàng gắn kết / ngắt kết nối / định dạng / sao lưu / vv các ổ đĩa mà anh ta đặt vào các vịnh này.

Tất cả chủ yếu hoạt động. Tuy nhiên, một vấn đề nhỏ là tôi không biết cách tìm hiểu bất kỳ thông tin nào về những gì trên (các) ổ đĩa được chèn cho đến khi các ổ đĩa được gắn thành công.

Vì vậy, ví dụ: nếu người dùng chèn ổ đĩa mà tôi không thể gắn (ví dụ: vì nó không được định dạng hoặc được định dạng với hệ thống tệp không mong muốn), tất cả ứng dụng của tôi có thể nói về nó là "Ổ đĩa không thể gắn kết".

Điều này không thỏa đáng lắm, vì nếu ổ đĩa không được định dạng, người dùng có thể sẽ muốn định dạng nó ... nhưng nếu ổ đĩa chứa dữ liệu từ một hệ thống tệp không được nhận dạng, người dùng có thể sẽ KHÔNG muốn định dạng nó .... hoặc ít nhất, tôi muốn có thể cảnh báo anh ta rằng bằng cách đó anh ta sẽ xóa dữ liệu có giá trị.

Vì vậy, câu hỏi của tôi là: có phương pháp nào để truy vấn một số thông tin cơ bản (đặc biệt là loại hệ thống tập tin) từ một ổ đĩa không yêu cầu ổ đĩa đã được gắn không? Hoặc tôi chỉ phải cố gắng gắn kết nó với các hệ thống tập tin đã biết khác nhau cho đến khi một trong những lần thử gắn kết thành công và đưa ra một thông báo "cẩn thận" mơ hồ nếu không ai trong số họ làm được?

Trong trường hợp có vấn đề, các đường dẫn tôi sử dụng để gắn các ổ đĩa trong khoang ổ đĩa là:

/dev/disk/by-path/pci-0000:00:1f.2-scsi-2:0:0:0
/dev/disk/by-path/pci-0000:00:1f.2-scsi-1:0:0:0

Câu trả lời:


55

Nếu các ổ đĩa không được đếm, có một số điều bạn có thể làm.

Bạn có thể sử dụng một lệnh như fdisk -lhoặc sfdisk -lđể liệt kê các phân vùng. Chỉ loại phân vùng có thể cung cấp cho bạn một số thông tin hữu ích nếu các phân vùng nơi thiết lập đúng.

# sfdisk -l

Disk /dev/sda: 4177 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls    #blocks   Id  System
/dev/sda1   *      0+     30      31-    248976   83  Linux
/dev/sda2         31    4176    4146   33302745   8e  Linux LVM
/dev/sda3          0       -       0          0    0  Empty
/dev/sda4          0       -       0          0    0  Empty

Nếu nó hiện diện trên hệ thống của bạn, bạn có thể sử dụng lệnh vol_idchống lại phân vùng để trả về một số chi tiết hữu ích (một phần của gói udev trên Debian). Điều này thường sẽ cho bạn biết hệ thống tập tin nào đang thực sự được sử dụng.

# vol_id /dev/sda1

ID_FS_USAGE=filesystem
ID_FS_TYPE=ext3
ID_FS_VERSION=1.0
ID_FS_UUID=32c44d53-9025-4d10-8f36-75c166547bd5
ID_FS_UUID_ENC=32c44d53-9025-4d10-8f36-75c166547bd5
ID_FS_LABEL=
ID_FS_LABEL_ENC=
ID_FS_LABEL_SAFE=

Lệnh lshw -class disksẽ cung cấp cho bạn một số chi tiết về loại ổ đĩa. Bạn có thể muốn sử dụng điều này nếu bạn tò mò về số sê-ri thực tế của ổ đĩa.

# lshw -class disk

  *-disk
       description: ATA Disk
       product: VBOX HARDDISK
       physical id: 0.0.0
       bus info: scsi@0:0.0.0
       logical name: /dev/sda
       version: 1.0
       serial: VB169e93fb-d1e0fd97
       size: 32GiB (34GB)
       capabilities: partitioned partitioned:dos
       configuration: ansiversion=5 signature=000d39f8

Nếu bạn chắc chắn rằng có một hệ thống tệp cụ thể như ext2 / 3 trên đó thì bạn có thể sử dụng công cụ Tune2fs cụ thể của hệ thống tệp để kiểm tra thêm chi tiết.

# tune2fs -l /dev/sda1

tune2fs 1.41.3 (12-Oct-2008)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          8cbdf102-05c7-4ae4-96ea-681cf9b11914
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      filetype sparse_super
Default mount options:    (none)
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              124496
Block count:              248976
Reserved block count:     12448
Free blocks:              212961
Free inodes:              124467
First block:              1
Block size:               1024
Fragment size:            1024
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         4016
Inode blocks per group:   502
Last mount time:          Thu Oct  7 15:34:42 2010
Last write time:          Thu Oct  7 15:34:42 2010
Mount count:              4
Maximum mount count:      30
Last checked:             Wed Sep 15 09:29:03 2010
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           128

Một công cụ hữu ích khác là lsblk .

# lsblk 

NAME                MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                   8:0    0    30G  0 disk 
└─sda1                8:1    0    30G  0 part 
  ├─vg1-root (dm-0) 254:0    0  23.3G  0 lvm  /
  └─vg1-swap (dm-1) 254:1    0   1.9G  0 lvm  [SWAP]
sr0                  11:0    1  1024M  0 rom  

Nếu bạn đã cài đặt, bạn có thể chạy một lệnh như thế này

parted /dev/sda print all

Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 34.4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      32.3kB  255MB   255MB   primary  ext2         boot 
 2      255MB   34.4GB  34.1GB  primary               lvm  

Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/vg1root: 32.6GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  32.6GB  32.6GB  ext3              

Dù sao đi nữa, tôi khuyên bạn nên xem nguồn udev hoặc chia tay .


12
'vol_id' đã được đổi tên thành 'blkid', cho bất kỳ ai tình cờ vấp phải câu trả lời tuyệt vời này.
Dave S.

lsblk -i -o kname,mountpoint,fstype,size,maj:min,name,state,rm,rota,ro,type,label,model,serial
sjas

câu trả lời tuyệt vời !!
Sufiyan Ghori

5

Một lệnh hữu ích khác là blkid- nó trả về thông tin tương tự vol_idnhưng cũng có thể quét tất cả các thiết bị trong hệ thống, thay vì yêu cầu thiết bị được truyền vào.

Để buộc blkidquét tất cả các thiết bị thay vì sử dụng thông tin được lưu trong bộ nhớ cache, hãy chạy blkid -c /dev/null(bạn cần có quyền đọc trên các thiết bị khối để bạn thường cần chạy nó dưới quyền root)


Một người dùng ẩn danh muốn thêm: Đây là tất cả hữu ích nhưng 'vol-id' hiện đã được thay thế hoàn toàn bằng 'blkid'; cả SuSE và Debian đều không có 'vol-id' trong kho của họ nữa. Chạy whereis blockidtừ dòng lệnh (hoặc man blockid), bạn sẽ tìm thấy nếu nó được tải. Chạy dưới dạng root: blkid /dev/sdb1give (ví dụ): /dev/sdb1: SEC_TYPE="msdos" LABEL="DR-05" UUID="8031-5963" TYPE="vfat"Trang man cũng đáng xem.
Chris S

1

Đây là một gợi ý từ IBM: SCSI - Thêm nóng, xóa, quét lại các thiết bị SCSI: Quét lại thiết bị SCSI . Điều này sẽ quét lại địa chỉ SCSI đó cho các thiết bị mới và sau đó bạn sẽ có thể đọc thông tin trong / var / log / message. Một số công cụ đĩa khác cũng sẽ hoạt động mà không cần bạn lắp ổ đĩa.

echo 1 > /sys/bus/scsi/drivers/sd/<SCSI-ID>/block/device/rescan

Tôi thực sự đã thử đôi khi hơi khác ngày hôm qua và nó đã hoạt động (hệ thống RHEL4):

cd /sys/bus/scsi/devices
echo > 0\:0\:0\:0/rescan

0

Tổng quan đơn giản về tất cả các phân vùng được tìm thấy bởi kernel cung cấp

cat /proc/partitions
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.