첫째, 상황 : 이동식 SSD 드라이브를 수용하는 2 개의 eSATA 드라이브 베이가있는 Linux 컴퓨터가 있습니다. 사용자 가이 베이에 넣은 드라이브를 쉽게 마운트 / 마운트 해제 / 포맷 / 백업 / 기타 할 수있게 해주는 작은 GUI 응용 프로그램을 작성하려고합니다.
모두 대부분 작동합니다. 그러나 하나의 작은 문제는 드라이브가 성공적으로 마운트 될 때까지 삽입 된 드라이브에 대한 정보를 찾는 방법을 모른다는 것입니다.
예를 들어, 사용자가 마운트 할 수없는 드라이브 (예 : 포맷되지 않았거나 예기치 않은 파일 시스템으로 포맷 된 드라이브)를 삽입하면 모든 앱에서 “드라이브를 마운트하지 못했습니다”라고 말할 수 있습니다.
드라이브가 포맷되지 않은 경우 사용자가 포맷을 원할 수도 있지만 드라이브에 인식 할 수없는 파일 시스템의 데이터가 포함되어 있으면 포맷하지 않을 것입니다 …. 또는 최소한 그렇게하면 잠재적으로 귀중한 데이터가 지워질 것이라고 경고하고 싶습니다.
그래서 내 질문은 : 드라이브를 이미 마운트 할 필요가없는 드라이브에서 기본 정보 (특히 파일 시스템 유형)를 쿼리하는 방법이 있습니까? 또는 마운트 시도 중 하나가 성공할 때까지 다양한 알려진 파일 시스템으로 마운트하려고 시도하고, 그렇지 않은 경우 모호한 “주의”메시지를 표시해야합니까?
중요한 경우 드라이브 베이에 드라이브를 마운트하는 데 사용하는 경로는 다음과 같습니다.
/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
답변
드라이브가 마운트 해제 된 경우 수행 할 수있는 몇 가지 작업이 있습니다.
fdisk -l
또는 같은 명령을 사용 sfdisk -l
하여 파티션을 나열 할 수 있습니다 . 설정이 올바른 파티션 인 경우 파티션 유형만으로도 유용한 정보를 얻을 수 있습니다 .y
# 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
파티션에 대해 명령 을 사용하여 유용한 세부 정보 (Debian의 udev 패키지의 일부)를 반환 할 수 있습니다 . 일반적으로 실제로 어떤 파일 시스템이 사용되고 있는지 알려줍니다.
# 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를 설치했다면 다음과 같은 명령을 실행할 수 있습니다
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
답변
또 다른 유용한 명령은 blkid
유사한 정보를 반환 vol_id
하지만 장치를 전달하지 않고 시스템의 모든 장치를 검색 할 수 있다는 것입니다.
blkid
캐시 된 정보를 사용하지 않고 모든 장치 를 강제 로 검색 하려면 다음을 실행하십시오 blkid -c /dev/null
(블록 장치에 대한 읽기 권한이 필요하므로 일반적으로 루트로 실행해야합니다)
답변
다음은 IBM 의 제안입니다 . SCSI-SCSI 장치의 핫 추가, 제거, 재검색 : SCSI 장치 재검색 . 새 장치의 SCSI 주소를 다시 스캔 한 다음 / var / log / messages의 정보를 읽을 수 있습니다. 드라이브를 마운트하지 않고도 일부 다른 디스크 도구도 작동합니다.
echo 1 > /sys/bus/scsi/drivers/sd/<SCSI-ID>/block/device/rescan
실제로 어제 약간 다른 것을 시도했지만 작동했습니다 (RHEL4 시스템).
cd /sys/bus/scsi/devices
echo > 0\:0\:0\:0/rescan
답변
커널이 찾은 모든 파티션에 대한 간단한 개요
cat /proc/partitions