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
@StephaneChazelas that's not a duplicate, df reads mount table and doesn't show about unmounted ones. –  warl0ck Nov 2 '12 at 2:26
add comment

marked as duplicate by Stephane 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 Answer

up vote 14 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
add comment

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