Linux 시스템에 연결된 모든 저장 장치 찾기
마운트 여부에 관계없이 특정 시스템에 연결된 모든 쓰기 가능한 스토리지 디바이스를 찾아야 합니다.
이를 위한 멍청한 방법은 모든 입력을 시도하는 것입니다./dev 가능한장치에 합니다.hd* and sd*)......
더 나은 해결책이 있을까요, 아니면 이 방법을 고수해야 할까요?
/proc/partitions에는 시스템이 인식하는 모든 차단 장치 및 파티션이 나열됩니다.그런 다음 사용해 볼 수 있습니다.file -s <device>파티션에 존재하는 파일 시스템의 종류를 확인합니다(있는 경우).
언제든지 할 수 있습니다.fdisk -lEC2 xvda 장치와 같은 이상한 설정에서도 꽤 잘 작동하는 것 같습니다.
m1.large 인스턴스에 대한 덤프는 다음과 같습니다.
root@ip-10-126-247-82:~# fdisk -l
Disk /dev/xvda1: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/xvda1 doesn't contain a valid partition table
Disk /dev/xvda2: 365.0 GB, 365041287168 bytes
255 heads, 63 sectors/track, 44380 cylinders, total 712971264 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/xvda2 doesn't contain a valid partition table
Disk /dev/xvda3: 939 MB, 939524096 bytes
255 heads, 63 sectors/track, 114 cylinders, total 1835008 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/xvda3 doesn't contain a valid partition table
하는 동안에mount다음과 같이 말합니다.
root@ip-10-126-247-82:~# mount
/dev/xvda1 on / type ext4 (rw)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/xvda2 on /mnt type ext3 (rw)
그리고./proc/partitions다음과 같이 말합니다.
root@ip-10-126-247-82:~# cat /proc/partitions
major minor  #blocks  name
 202        1   10485760 xvda1
 202        2  356485632 xvda2
 202        3     917504 xvda3
측면 참고
어떻게.fdisk -l작품은 제 자신을 알고 싶은 것입니다.
당신은 또한 lsblk를 시도할 수 있습니다...util-linux에 있습니다... 하지만 저도 질문이 있습니다.
fdisk -l /dev/sdl
성과 없음
grep sdl /proc/partitions      
   8      176   15632384 sdl
   8      177   15628288 sdl1
lsblk | grep sdl
sdl       8:176  1  14.9G  0 disk  
`-sdl1    8:177  1  14.9G  0 part  
fdisk는 좋지만 그렇게 좋지는 않습니다... 모든 것을 "볼" 수는 없는 것 같습니다.
나의 특별한 예에서 나는 카드 리더가 내장된 스틱을 가지고 있고 나는 오직 fdisk를 사용하는 스틱만 볼 수 있습니다.
fdisk -l /dev/sdk
Disk /dev/sdk: 15.9 GB, 15931539456 bytes
255 heads, 63 sectors/track, 1936 cylinders, total 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xbe24be24
   Device Boot      Start         End      Blocks   Id  System
/dev/sdk1   *        8192    31116287    15554048    c  W95 FAT32 (LBA)
하지만 카드가 아닙니다(카드는 /dev/sdl).
또한 file-s는 비효율적입니다...
file -s /dev/sdl1
/dev/sdl1: sticky x86 boot sector, code offset 0x52, OEM-ID "NTFS    ", sectors/cluster 8, reserved sectors 0, Media descriptor 0xf8, heads 255, hidden sectors 8192, dos < 4.0 BootSector (0x0)
좋아요... 하지만
fdisk -l /dev/sdb
/dev/sdb1            2048   156301487    78149720   fd  Linux raid autodetect
/dev/sdb2       156301488   160086527     1892520   82  Linux swap / Solaris
file -s /dev/sdb1
/dev/sdb1: sticky \0
fdisk로 액세스할 수 없는 디스크에 대한 정보를 보려면 parted:
parted /dev/sdl print
Model: Mass Storage Device (scsi)
Disk /dev/sdl: 16.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number  Start   End     Size    Type     File system  Flags
 1      4194kB  16.0GB  16.0GB  primary  ntfs
arted /dev/sdb print 
Model: ATA Maxtor 6Y080P0 (scsi)
Disk /dev/sdb: 82.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number  Start   End     Size    Type     File system     Flags
 1      1049kB  80.0GB  80.0GB  primary                  raid
 2      80.0GB  82.0GB  1938MB  primary  linux-swap(v1)
ls /sys/block
HAL(커널 2.6.17 이상) 사용:
#! /bin/bash
hal-find-by-property --key volume.fsusage --string filesystem |
while read udi ; do
    # ignore optical discs
    if [[ "$(hal-get-property --udi $udi --key volume.is_disc)" == "false" ]]; then
        dev=$(hal-get-property --udi $udi --key block.device)   
        fs=$(hal-get-property --udi $udi --key volume.fstype) 
        echo $dev": "$fs
    fi 
done
현대의 리눅스 시스템은 일반적으로 존재하는 장치의 경우 /dev에만 항목이 있으므로 당신이 제안하는 대로 hda*와 sda*를 거치면 꽤 잘 작동할 것입니다.
그렇지 않으면 /proc에 사용할 수 있는 항목이 있을 수 있습니다.여기서 간단히 살펴본 결과, /proc/partitions는 필요한 작업을 수행할 수 있을 것으로 보입니다.
libsysfs는 잠재적으로 유용해 보이지만 셸 스크립트에서 직접 볼 수는 없습니다.시스템 도구라는 프로그램이 함께 제공되어 원하는 작업을 수행할 수 있지만 다른 프로그램을 사용하는 것보다 /sys를 직접 확인하는 것이 더 쉬울 수도 있습니다.
언급URL : https://stackoverflow.com/questions/200960/find-all-storage-devices-attached-to-a-linux-machine
'source' 카테고리의 다른 글
| 파이썬에서 "필터" 개체의 길이를 찾는 방법 (0) | 2023.05.26 | 
|---|---|
| Choosing MongoDb/CouchDb/RavenDb - performance and scalability advice (0) | 2023.05.26 | 
| DataContext 속성을 사용하여 XAML의 창에 ViewModel을 설정하려면 어떻게 해야 합니까? (0) | 2023.05.26 | 
| WPF 창이 열려 있는지 확인하는 방법 (0) | 2023.05.26 | 
| XML 구문 분석을 위한 최상의 노드 모듈 (0) | 2023.05.26 |