I have Ubuntu server 12.04 installed with no GUI. I would like to list my hard drive and it's partitions along with how big each partition is using the command line.
4 Answers
Here are a few ways:
If you have an MBR partition table:
terdon@oregano ~ $ sudo fdisk -l Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 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: 0x4b66b5d5 Device Boot Start End Blocks Id System /dev/sda1 63 80324 40131 de Dell Utility /dev/sda2 * 81920 30801919 15360000 7 HPFS/NTFS/exFAT /dev/sda3 30801920 194643539 81920810 7 HPFS/NTFS/exFAT /dev/sda4 194643601 976773119 391064759+ f W95 Ext'd (LBA) /dev/sda5 194643603 198836504 2096451 c W95 FAT32 (LBA) /dev/sda6 342951936 960387071 308717568 83 Linux /dev/sda7 198840320 342949887 72054784 83 Linux /dev/sda8 960389120 976773119 8192000 82 Linux swap / Solarisor sudo sfdidk -l
These do not give particularly human readable output though. The next choices are better.
For both GPT and MBR partition tables:
terdon@oregano ~ $ sudo parted -l Model: ATA ST9500420AS (scsi) Disk /dev/sda: 500GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 32.3kB 41.1MB 41.1MB primary fat16 diag 2 41.9MB 15.8GB 15.7GB primary ntfs boot 3 15.8GB 99.7GB 83.9GB primary ntfs 4 99.7GB 500GB 400GB extended lba 5 99.7GB 102GB 2147MB logical fat32 lba 7 102GB 176GB 73.8GB logical ext4 6 176GB 492GB 316GB logical ext4 8 492GB 500GB 8389MB logical linux-swap(v1) Model: ST950032 5AS (scsi) Disk /dev/sdb: 500GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 32.3kB 500GB 500GB primary ntfslsblkterdon@oregano ~ $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465.8G 0 disk ├─sda1 8:1 0 39.2M 0 part ├─sda2 8:2 0 14.7G 0 part ├─sda3 8:3 0 78.1G 0 part ├─sda4 8:4 0 1K 0 part ├─sda5 8:5 0 2G 0 part ├─sda6 8:6 0 294.4G 0 part /home ├─sda7 8:7 0 68.7G 0 part / └─sda8 8:8 0 7.8G 0 part [SWAP] sdb 8:16 0 465.8G 0 disk └─sdb1 8:17 0 465.8G 0 part /test sr0 11:0 1 1024M 0 romInstall
inxithen runterdon@oregano ~ $ inxi -D Drives: HDD Total Size: 1000.2GB (70.1% used) 1: id: /dev/sda model: ST9500420AS size: 500.1GB 2: id: /dev/sdb model: 5AS size: 500.1GB
- 104,119
Here's couple of other approaches:
lshw
The short version of lshw conveniently lists the size of disks in the description
sudo lshw -short | awk '/disk|volume/'
/0/1/0.0.0 /dev/sda disk 120GB Radeon R7
/0/1/0.0.0/1 /dev/sda1 volume 111GiB EXT4 volume
/0/2/0.0.0 /dev/cdrom disk DVDRAM GT20N
And for more detailed info use lshw -class volume,disk
udiscsctl
udiscsctl has info option which coupled with -b (for block-device) flag, can show detailed information. Using a simple for loop and awk, we can make it show partition and size information specifically. Here is my example:
$ for device in /dev/sd* ; do udisksctl info -b $device | awk '/[[:blank:]]Device:/; /Size/' ;done
Device: /dev/sda
Size: 120034123776
Device: /dev/sda1
Size: 120032591872
Size: 120032591872
df command
df command shows information about all currently mounted filesystems. Again, we can use this command directly, but also clean up the output using awk
df -h | awk 'NR==1 ;/\/dev\/sd*/'
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 110G 68G 37G 66% /
Here we just print the header and use -h flag that makes size be printed in human-readable format
/sys/class/block/sd* files
Inside /sys/class/block/ folder you will find files related to block devices( which typically refer to physical memory devices ) . In particular we want to focus on any file that starts with sd letters.
For instance, I have one hard drive with only one partition. Thus /sys/class/block/sda refers to my whole hard-drive, while /sys/class/block/sda1 refers to my Ubuntu partition.
Inside each folder for each device, you will find the size file , which lists how many blocks of 512 MB there are on the device. So the true size is number of blocks x 521.
Again, with little command line magic, we get:
$ for device in /sys/class/block/sd*; do printf "%s " $device; bc <<< "$(cat $device/size)*512" ; done
/sys/class/block/sda 120034123776
/sys/class/block/sda1 120032591872
Or a bit shorter with awk:
$ awk '{print substr(FILENAME,18)" "$1*512}' /sys/class/block/sd*/size
sda/size 120034123776
sda1/size 120032591872
- 107,582
I got to this by searching "ubuntu server list gpt partitions". I was searching for an answer when using 16.04.1 LTS. For those of you who want to list partitions (MBR or GPT), fdisk seems to have support for both (and not just MBR as in earlier Ubuntu versions) in 16.04.1 LTS. Also parted isn't installed by default when the "basic system utilities" option is selected during install. So the following command is all you need on 16.04.1 LTS:
sudo fdisk -l
- 109

