장치의 모든 파일을 디렉터리에 복사하는 스크립트를 작성 중입니다. 문제는 일부 장치에 여러 파티션이 있고 일부 파티션에는 파일을 복사할 파일 시스템이 없다는 것입니다. 현재 저는 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"