如何确定未挂载设备的文件系统?

Tob*_*ler 104 filesystems

可能的重复:
从脚本中查找分区
的文件系统 如何通过终端显示文件系统类型?

我正在寻找一个命令,它产生文件系统类型,就像mount使用/检测它一样,而不实际安装它。它也应该适用于例如 LUKS 加密设备(file -s产生“LUKS 加密文件”而不是“crypto_LUKS”)。肯定有比解析fsck -N /dev/whatever输出更方便的方法(根据相应的存在,可能会使用 stderr fsck.TYPE)?

dar*_*nir 136

有多种方法可以获取这些信息。其中大多数要求您解析另一个命令的输出。

  • 运行# fdisk /dev/sdX -l以获得文件系统结构的基本概念。输出是这样的:

    Disk /dev/sda: 320.1 GB, 320072933376 bytes, 625142448 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: 0x9f7685a8
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1              63      289169      144553+  83  Linux
    /dev/sda2          289170   459121634   229416232+  83  Linux
    /dev/sda3       459121635   461129759     1004062+  82  Linux swap / Solaris
    /dev/sda4   *   461129760   625142447    82006344    7  HPFS/NTFS/exFAT
    
    Run Code Online (Sandbox Code Playgroud)

    但这只会告诉您分区类型。

  • 您还可以使用# blkid来获取以下输出:

    /dev/sda1: LABEL="boot" UUID="aa84c5a8-6408-4952-b577-578f2a67af86" TYPE="ext2" 
    /dev/sda2: LABEL="root" UUID="a430e0ef-fd35-432f-8b9a-75a49b89ad8a" TYPE="ext4" 
    /dev/sda3: LABEL="swap" UUID="e388806a-dc27-4f4e-a136-3d1ff4e53962" TYPE="swap" 
    /dev/sda4: UUID="088E027A8E026114" TYPE="ntfs" 
    
    Run Code Online (Sandbox Code Playgroud)
  • 此外,对于格式良好的输出,您可以运行# parted /dev/sdX -l以下输出:

    Model: ATA WDC WD3200BEVT-7 (scsi)
    Disk /dev/sda: 320GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    Disk Flags: 
    
    Number  Start   End    Size    Type     File system     Flags
     1      32.3kB  148MB  148MB   primary  ext2
     2      148MB   235GB  235GB   primary  ext4
     3      235GB   236GB  1028MB  primary  linux-swap(v1)
     4      236GB   320GB  84.0GB  primary  ntfs            boot
    
    Run Code Online (Sandbox Code Playgroud)
  • $ df -T. 这是另一个不需要超级用户权限即可执行的命令。但是,这将为每个挂载点报告

    Filesystem     Type     1K-blocks     Used Available Use% Mounted on
    rootfs         rootfs   225815276 99381340 114963128  47% /
    dev            devtmpfs   1538396        0   1538396   0% /dev
    run            tmpfs      1541260      416   1540844   1% /run
    /dev/sda2      ext4     225815276 99381340 114963128  47% /
    tmpfs          tmpfs      1541260      360   1540900   1% /dev/shm
    tmpfs          tmpfs      1541260        0   1541260   0% /sys/fs/cgroup
    tmpfs          tmpfs      1541260      900   1540360   1% /tmp
    /dev/sda1      ext2        139985    30386    102372  23% /boot
    /dev/sda4      fuseblk   82006340 79676036   2330304  98% /mnt
    
    Run Code Online (Sandbox Code Playgroud)

另一个可以派上用场的命令是# file -sL /dev/sdXY. 这有一个缺点,它不适用于完整的块设备。需要传递确切的设备。虽然输出非常整洁:

/dev/sda1: Linux rev 1.0 ext2 filesystem data (mounted or unclean), UUID=aa84c5a8-6408-4952-b577-578f2a67af86, volume name "boot"
Run Code Online (Sandbox Code Playgroud)

所有这些将始终输出到标准输出。如果需要,您可以在脚本中解析它们。

  • `#lsblk -f` 至少也有助于它返回每个已安装或卸载的块设备。 (11认同)
  • 这可能是由于我尝试在其上运行它的 linux(它是 Buffalo LinkStation NAS 设备上的自定义发行版)顺便说一句,甚至更好的解决方案:[`blkid -o value -s TYPE $DEV`](http://unix .stackexchange.com/a/53371/863) (4认同)