Apa cara terbaik untuk mendapatkan info tentang drive yang saat ini tidak terpasang?

38

Pertama, situasinya: Saya memiliki komputer Linux dengan dua rongga drive eSATA yang menerima drive SSD yang dapat dilepas. Saya mencoba untuk menulis aplikasi GUI kecil yang membuatnya lebih mudah bagi pengguna untuk me-mount / unmount / format / backup / dll drive yang ia masukkan ke dalam rongga ini.

Itu semua kebanyakan berhasil. Satu masalah kecil, bagaimanapun, adalah bahwa saya tidak tahu bagaimana menemukan informasi apa pun tentang apa yang ada di drive yang dimasukkan sampai setelah drive berhasil dipasang.

Jadi, misalnya, jika pengguna memasukkan drive yang tidak dapat saya pasang (misalnya karena tidak diformat, atau diformat dengan sistem file yang tidak terduga), semua aplikasi saya dapat mengatakan tentang itu adalah "Drive gagal dipasang".

Ini tidak terlalu memuaskan, karena jika drive tidak diformat, pengguna mungkin ingin memformatnya ... tetapi jika drive tersebut berisi data dari sistem file yang tidak dikenal, pengguna mungkin TIDAK ingin memformatnya .... atau setidaknya, saya ingin bisa memperingatkannya bahwa dengan melakukan itu dia akan menghapus data yang berpotensi berharga.

Jadi pertanyaan saya adalah: apakah ada metode untuk menanyakan beberapa informasi dasar (terutama tipe sistem file) dari drive yang tidak mengharuskan drive sudah dipasang? Atau apakah saya hanya perlu mencoba me-mount-nya dengan berbagai sistem file yang dikenal sampai salah satu upaya mount berhasil, dan memberikan pesan "hati-hati" yang samar-samar jika tidak ada yang melakukannya?

Jika itu penting, jalur yang saya gunakan untuk memasang drive di drive bay adalah:

/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
Jeremy Friesner
sumber

Jawaban:

55

Jika drive dilepas, ada beberapa hal yang dapat Anda lakukan.

Anda dapat menggunakan perintah seperti fdisk -latau sfdisk -luntuk membuat daftar partisi. Hanya tipe partisi yang dapat memberi Anda beberapa informasi yang berguna jika partisi di mana pengaturannya benar

# 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

Jika ada di sistem Anda, Anda dapat menggunakan perintah vol_idmelawan partisi untuk mengembalikan beberapa detail yang berguna (bagian dari paket udev di Debian). Ini biasanya akan memberi tahu Anda apa sebenarnya sistem file yang digunakan.

# 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=

Perintah lshw -class diskakan memberi Anda beberapa detail tentang jenis drive. Anda mungkin ingin menggunakan ini jika Anda ingin tahu tentang nomor seri drive yang sebenarnya.

# 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

Jika Anda yakin ada sistem file tertentu seperti ext2 / 3 di atasnya maka Anda dapat menggunakan alat tune2fs sistem file khusus untuk memeriksa lebih detail.

# 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

Alat lain yang bermanfaat adalah 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  

Jika Anda telah menginstal parted Anda dapat menjalankan perintah seperti ini

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              

Bagaimanapun melewati yang saya sarankan Anda melihat sumber udev atau berpisah .

Sakit kepala
sumber
12
'vol_id' telah diganti namanya menjadi 'blkid', bagi siapa saja yang kebetulan menemukan jawaban hebat ini.
Dave S.
lsblk -i -o kname,mountpoint,fstype,size,maj:min,name,state,rm,rota,ro,type,label,model,serial
sjas
jawaban yang bagus !!
Sufiyan Ghori
5

Perintah lain yang bermanfaat adalah blkid- ia mengembalikan informasi yang serupa vol_idtetapi juga dapat memindai semua perangkat dalam sistem, daripada mengharuskan perangkat untuk dilewatkan.

Untuk memaksa blkidmemindai semua perangkat alih-alih menggunakan informasi yang di-cache, jalankan blkid -c /dev/null(Anda perlu izin baca pada perangkat blok sehingga biasanya Anda harus menjalankannya sebagai root)

James
sumber
Seorang pengguna anonim ingin menambahkan: Ini semua berguna tetapi 'vol-id' kini telah diganti seluruhnya oleh 'blkid'; baik SuSE maupun Debian tidak memiliki 'vol-id' di repositori mereka lagi. Jalankan whereis blockiddari baris perintah (atau man blockid), Anda akan menemukan jika itu dimuat. Jalankan sebagai root: blkid /dev/sdb1memberi (misalnya): /dev/sdb1: SEC_TYPE="msdos" LABEL="DR-05" UUID="8031-5963" TYPE="vfat"Halaman manual juga layak untuk dilihat.
Chris S
1

Berikut satu saran dari IBM: SCSI - Hot add, remove, rescan of SCSI devices: Rescan of a SCSI Device . Ini akan memindai ulang alamat SCSI untuk perangkat baru, dan kemudian Anda dapat membaca informasi di / var / log / messages. Beberapa alat disk lain juga akan berfungsi, tanpa Anda memasang drive.

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

Saya sebenarnya mencoba sesuatu yang sedikit berbeda kemarin, dan berhasil (sistem RHEL4):

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

Gambaran sederhana dari semua partisi yang ditemukan oleh kernel memberikan

cat /proc/partitions
Frank Breitling
sumber