Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

Possible Duplicate:
Find filesystem of a partition from a script
How to show the filesystem type via the terminal?

I'm looking for a command that yields the filesystem type as mount would use/detect it, without actually mounting it. It should also work e.g. for LUKS encrypted devices (where file -s yields "LUKS encrypted file" instead of "crypto_LUKS"). Surely there is a more convenient way than parsing fsck -N /dev/whatever's output (which may use stderr depending on the existence of a corresponding fsck.TYPE)?

share|improve this question

marked as duplicate by Stéphane Chazelas, Renan, jasonwryan, jw013, Tobias Kienzler Nov 2 '12 at 6:49

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

1  
@StephaneChazelas that's not a duplicate, df reads mount table and doesn't show about unmounted ones. –  warl0ck Nov 2 '12 at 2:26

1 Answer 1

up vote 19 down vote accepted

There are multiple ways to get this information. Most of them require you to parse the output of another command.

You could run sudo fdisk /dev/sdX -l to get a basic idea of the filesystem structure. The output is something like this:

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

But this will only tell you the partition type.

You could also use # blkid to get the following output:

/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" 

Also, for a well formatted output, you could run # parted /dev/sdX -l for the following output:

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

You can also run $ df -T. This is another command that does not require super user privileges to execute. However, this will report for every mount point

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

Another command that can come handy is # file -sL /dev/sdXY. This has one downside in that it does not work with the full block device. Requires the exact device to be passed. The output is quite neat though:

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

All of these will always be output to stdout. You can parse them in a script if required.

share|improve this answer
    
(eval $(blkid $DEV | awk ' { print $3 } '); echo $TYPE) will do, thanks! (The outer parantheses are only necessary if TYPE is already used elsewhere and shall not be changed) –  Tobias Kienzler Nov 1 '12 at 16:34
    
df -T will claim tmpfs for any loopdevice it seems, and fdisk -l doesn't appear to list a type when applied to a partition itself, while parted ignores the device for me and file -s yields the wrong format for a luks encrypted device. But blkid works perfectly, even for a loop device or the image file itself –  Tobias Kienzler Nov 1 '12 at 16:42
    
That behavior is expected out of df -T and fdisk -l. However, I don't understand how parted ignores the complete block device. –  darnir Nov 1 '12 at 16:48
    
That may be due to the linux I tried to run this on (it's a custom distro on a Buffalo LinkStation NAS device) Btw, even better solution: blkid -o value -s TYPE $DEV –  Tobias Kienzler Nov 2 '12 at 7:02
    
@TobiasKienzler Instead of eval, you could use . <(blkid -pi /dev/sdXN) –  F. Hauri Apr 18 at 14:35

Not the answer you're looking for? Browse other questions tagged or ask your own question.