วิธีที่ดีที่สุดในการรับข้อมูลเกี่ยวกับไดรฟ์ที่ไม่ได้เมานต์คืออะไร


38

อย่างแรกสถานการณ์: ฉันมีคอมพิวเตอร์ Linux ที่มีช่องไดรฟ์ eSATA สองช่องที่รับไดรฟ์ SSD แบบถอดได้ ฉันกำลังพยายามเขียนแอปพลิเคชั่น GUI เล็ก ๆ น้อย ๆ ที่ทำให้ผู้ใช้เมานต์ / unmount / format / backup / etc ได้ง่ายขึ้นไดรฟ์ที่เขาใส่ลงในช่องเหล่านี้

ทุกอย่างทำงานได้เป็นส่วนใหญ่ อย่างไรก็ตามปัญหาเล็ก ๆ น้อย ๆ อย่างหนึ่งคือฉันไม่รู้วิธีหาข้อมูลใด ๆ เกี่ยวกับสิ่งที่อยู่ในไดรฟ์ที่ใส่เข้าไปจนกระทั่งหลังจากที่ไดรฟ์ได้รับการติดตั้งเรียบร้อยแล้ว

ตัวอย่างเช่นหากผู้ใช้แทรกไดรฟ์ที่ฉันไม่สามารถต่อเชื่อมได้ (เช่นเนื่องจากไม่มีการฟอร์แมตหรือฟอร์แมตด้วยระบบไฟล์ที่ไม่คาดคิด) แอปทั้งหมดของฉันสามารถพูดได้ว่า "ไดรฟ์ล้มเหลวในการเมาท์"

สิ่งนี้ไม่เป็นที่น่าพอใจมากนักถ้าหากไดร์ฟนั้นไม่ฟอร์แมตผู้ใช้อาจต้องการฟอร์แมตมัน ... แต่ถ้าไดร์ฟนั้นมีข้อมูลจากระบบไฟล์ที่ไม่รู้จักผู้ใช้อาจจะไม่ต้องการฟอร์แมต .... หรือ อย่างน้อยฉันก็อยากจะเตือนเขาด้วยการทำเช่นนั้นเขาจะลบข้อมูลที่มีค่า

ดังนั้นคำถามของฉันคือมีวิธีการสอบถามข้อมูลพื้นฐานบางอย่าง (โดยเฉพาะประเภทระบบแฟ้ม) จากไดรฟ์ที่ไม่ต้องการให้ติดตั้งไดรฟ์แล้วหรือไม่ หรือฉันต้องลองเมานต์ด้วยระบบไฟล์ต่าง ๆ ที่รู้จักกันจนกระทั่งหนึ่งในความพยายามในการเมาต์สำเร็จและให้ข้อความ "ระวัง" ที่คลุมเครือถ้าไม่มีใครทำ?

ในกรณีที่เป็นเรื่องเส้นทางที่ฉันใช้ในการติดตั้งไดรฟ์ในช่องไดรฟ์คือ:

/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

คำตอบ:


55

หากไม่ได้ติดตั้งไดรฟ์มีหลายสิ่งที่คุณสามารถทำได้

คุณสามารถใช้คำสั่งเช่นfdisk -lหรือsfdisk -lเพื่อแสดงรายการพาร์ติชัน เพียงแค่ประเภทพาร์ติชันอาจให้ข้อมูลที่เป็นประโยชน์แก่คุณหากพาร์ติชั่นที่การตั้งค่าถูกต้อง

# 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

หากมีอยู่ในระบบของคุณคุณสามารถใช้คำสั่งvol_idกับพาร์ติชันเพื่อส่งกลับรายละเอียดที่เป็นประโยชน์ (ส่วนหนึ่งของแพ็คเกจ udev บน Debian) โดยทั่วไปจะบอกให้คุณทราบว่าระบบไฟล์ใดที่ใช้งานอยู่

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

คำสั่งlshw -class diskจะให้รายละเอียดเกี่ยวกับประเภทของไดรฟ์ คุณอาจต้องการใช้สิ่งนี้หากคุณสงสัยเกี่ยวกับหมายเลขซีเรียลจริงของไดรฟ์

# 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

ถ้าคุณแน่ใจว่ามีความเป็นเฉพาะเช่นระบบแฟ้ม ext2 / 3 กับมันแล้วคุณสามารถใช้ระบบแฟ้มที่เฉพาะเจาะจงtune2fsเครื่องมือในการตรวจสอบรายละเอียดเพิ่มเติม

# 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

อีกเครื่องมือที่มีประโยชน์เป็น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  

หากคุณติดตั้งแยกส่วนแล้วคุณสามารถเรียกใช้คำสั่งเช่นนี้ได้

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              

ที่ผ่านมาที่ฉันแนะนำให้คุณดูที่udevหรือแหล่งที่แยก


12
'vol_id' ได้ถูกเปลี่ยนชื่อเป็น 'blkid' สำหรับทุกคนที่บังเอิญเจอคำตอบที่ยอดเยี่ยมนี้
เดฟเอส

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

คำตอบที่ยอดเยี่ยม !!
Sufiyan Ghori

5

อีกคำสั่งที่มีประโยชน์คือblkid- มันคืนค่าข้อมูลที่คล้ายกันvol_idแต่ยังสามารถสแกนอุปกรณ์ทั้งหมดในระบบได้แทนที่จะต้องการให้อุปกรณ์ส่งผ่าน

หากต้องการบังคับblkidให้สแกนอุปกรณ์ทั้งหมดแทนที่จะใช้ข้อมูลแคชให้เรียกใช้blkid -c /dev/null(คุณต้องได้รับอนุญาตการอ่านบนอุปกรณ์บล็อกดังนั้นโดยปกติคุณจะต้องเรียกใช้เป็นรูท)


ผู้ใช้ที่ไม่ระบุชื่อต้องการเพิ่ม: ทั้งหมดนี้มีประโยชน์ แต่ 'vol-id' ได้ถูกแทนที่โดย 'blkid' ทั้งหมดแล้ว ทั้ง SuSE และ Debian ไม่มี 'vol-id' ในที่เก็บของพวกเขาอีกต่อไป เรียกใช้whereis blockidจากบรรทัดคำสั่ง (หรือman blockid) คุณจะพบว่ามันถูกโหลด เรียกใช้เป็นรูท: blkid /dev/sdb1ให้ (ตัวอย่าง): /dev/sdb1: SEC_TYPE="msdos" LABEL="DR-05" UUID="8031-5963" TYPE="vfat"หน้า man ก็ควรดูด้วยเช่นกัน
Chris S

1

ต่อไปนี้เป็นข้อเสนอแนะหนึ่งข้อจากIBM: SCSI - เพิ่ม, ลบ, สแกนซ้ำอุปกรณ์ SCSI: สแกนอุปกรณ์ SCSIอีกครั้ง นี่จะสแกนที่อยู่ SCSI นั้นสำหรับอุปกรณ์ใหม่จากนั้นคุณจะสามารถอ่านข้อมูลใน / var / log / ข้อความ เครื่องมือดิสก์อื่น ๆ บางตัวยังใช้งานได้โดยที่คุณไม่ต้องติดตั้งไดรฟ์

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

ฉันลอง somethign แตกต่างกันเล็กน้อยเมื่อวานและมันใช้งานได้ (ระบบ RHEL4):

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

0

ภาพรวมอย่างง่ายของพาร์ติชันทั้งหมดที่พบโดยเคอร์เนลให้

cat /proc/partitions
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.