파일 시스템이 있는 모든 파티션 찾기

파일 시스템이 있는 모든 파티션 찾기

저는 장치의 모든 파일을 디렉터리에 복사하는 스크립트를 작성 중입니다. 문제는 일부 장치에 여러 파티션이 있고 일부 파티션에는 파일을 복사할 파일 시스템이 없다는 것입니다. 지금은 lsblk장치의 파티션 목록을 가져오고 file -s각 파티션의 파일 시스템을 확인하는 데 사용하려고 생각 중입니다.

내가 하려는 일을 덜 잔인하게 할 수 있는 방법이 있나요?


빈 파티션 문제에 관한 정보는 다음과 같습니다.

# /dev/sdb is a flashdrive with two partitions
# /dev/sdb1 has no filesystem
# /dev/sdb2 has an ext4 partition
$ lsblk -fi
...
sdb    vfat   CARRIER-R C84B-6A72                            
|-sdb1 vfat   CARRIER-R C84B-6A72                            
`-sdb2 ext4   CARRIER-R 33ebb632-68a5-4bf5-bd29-90733af9699e
...

$ lsblk -ln -o NAME,FSTYPE
...
sdb  vfat
sdb1 vfat
sdb2 ext4
...

# As confirmation, mounting the partition fails
$ mount -t auto /dev/sdb1 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/sdb1
...

$ dmesg | tail
...
[  985.933627] EXT4-fs (sdb1): VFS: Can't find ext4 filesystem
[  985.935722] EXT4-fs (sdb1): VFS: Can't find ext4 filesystem
[  985.937603] EXT4-fs (sdb1): VFS: Can't find ext4 filesystem
[  985.939623] FAT-fs (sdb1): invalid media value (0xa7)
[  985.939627] FAT-fs (sdb1): Can't find a valid FAT filesystem

답변1

lsblk나는 그렇게 추악 하다고 생각하지 않지만 file -s다른 방법이 있습니다. 대신
사용할 수 있습니다 blkid. 기본적으로 blkid인수가 없으면 알려진 블록 장치와 파일 시스템 유형을 포함하여 이에 대한 약간의 정보가 나열됩니다. 형식도 키=값 쌍 형식(기본값)이므로 스크립트에 쉽게 덤프할 수 있습니다.

내 시스템의 출력은 다음과 같습니다.

>> blkid
/dev/sda1: LABEL="boot" UUID="5F6E-FD2B" TYPE="vfat" 
/dev/sda2: UUID="yBVbC2-MFnP-1T1s-9XGz-VCUH-S5oG-aNSXDg" TYPE="LVM2_member" 
/dev/mapper/sys-root: UUID="0e1e5a6b-31b2-4e13-9b26-cbbb74e95ab9" TYPE="xfs" 
/dev/mapper/sys-var--log: UUID="49f1b45d-d303-4c2e-a72b-c75e8f1e27ae" TYPE="xfs" 
/dev/mapper/sys-usr--portage: UUID="b8a494dd-f7f4-4e5e-9975-e21a61c95d22" TYPE="xfs" 
/dev/mapper/sys-stmp: UUID="f2b3252c-3ec2-4c66-bed2-26c93f12b535" TYPE="xfs" 
/dev/mapper/sys-home--phemmer--luks: UUID="898f9f52-3c9d-475c-9e7b-1a2263778a39" TYPE="crypto_LUKS" 
/dev/mapper/_dev_dm_4: UUID="d0cb5255-e35a-4ee2-94ca-f1a7f7339eb9" TYPE="xfs" 

관련 정보