Filesystems
查找帶有文件系統的所有分區
我正在編寫一個腳本,它將設備上的所有文件複製到一個目錄中。問題是一些設備有多個分區,而一些分區沒有文件系統來複製文件。目前,我正在考慮使用
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
我不認為
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"