Properly partitioning 3TB Western Digital HDD on GNU/Linux
Posted: Wed Feb 06, 2013 1:21 pm
Since the disk is larger than 2TB, we need to use the new partition table type: GPT (See Rod Smith's "GPT fdisk Tutorial" for more information)
In order to find out if your harddisk has 4k (4096 Bytes) blocks or 512 Bytes, use the command "hdparm" (In my setup, the 3TB disk is /dev/sdd. You must change that to fit yours):
Here's an example of how the output on a 3 TB Western Digital (red edition) drive might look like:
(I only copy/pasted the beginning of the output here, as it contains the important information about cylinders, sector size, etc)
For this WDC red-edition harddisk, we seem to be lucky as it tells the truth about its logical and physical sector size being: 512/4096 - Some WDC models seem to be "lying" about that, claiming to have "512/512".
CAUTION: If you use "fdisk" on >2TB disks with GPT, they will claim that the disk has 512/512, as well tell you that the partition starts at sector #1. This is not true!
fdisk doesn't read GPT correctly and therefore the information displayed is inaccurate.
For example, running "fdisk -l /dev/sdd" returns the following:
In order to display your partition table in a way familiar from classic fdisk, but GPT-aware, use the "sgdisk" commandline utility:
The result for the unpartitione WDC 3TB drive looks like this:
Now we create one large partition on the drive:
Let's see how to get the values for this command:
The output should look like this:
Final step is to format it, using the ext4 filesystem:
In order to find out if your harddisk has 4k (4096 Bytes) blocks or 512 Bytes, use the command "hdparm" (In my setup, the 3TB disk is /dev/sdd. You must change that to fit yours):
Code: Select all
$ sudo hdparm -I /dev/sdd
(I only copy/pasted the beginning of the output here, as it contains the important information about cylinders, sector size, etc)
Code: Select all
Model Number: WDC WD30EFRX-68AX9N0
Serial Number: WD-WMC1T1244880
Firmware Revision: 80.00A80
Transport: Serial, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
Standards:
Supported: 9 8 7 6 5
Likely used: 9
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 16514064
LBA user addressable sectors: 268435455
LBA48 user addressable sectors: 5860533168
Logical Sector size: 512 bytes
Physical Sector size: 4096 bytes
Logical Sector-0 offset: 0 bytes
device size with M = 1024*1024: 2861588 MBytes
device size with M = 1000*1000: 3000592 MBytes (3000 GB)
cache/buffer size = unknown
CAUTION: If you use "fdisk" on >2TB disks with GPT, they will claim that the disk has 512/512, as well tell you that the partition starts at sector #1. This is not true!
fdisk doesn't read GPT correctly and therefore the information displayed is inaccurate.
For example, running "fdisk -l /dev/sdd" returns the following:
Code: Select all
WARNING: GPT (GUID Partition Table) detected on '/dev/sdd'! The util fdisk doesn't support GPT. Use GNU Parted.
Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 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: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdd1 1 4294967295 2147483647+ ee GPT
Code: Select all
sudo sgdisk -p /dev/sdd
Code: Select all
Disk /dev/sdd: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): D6A65FFD-D1B0-4FEA-BE3A-2DB964B82C29
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 5860533101 sectors (2.7 TiB)
Number Start (sector) End (sector) Size Code Name
Code: Select all
sudo sgdisk -a 2048 -n 1:2048:5860532224 -t 1:8300 -c 1:"My stuff" /dev/sdd
- "-a 2048" tell sgdisk to align the sectors in a multiple of 2048
- "-n 15860532224" creates a partition number 1, from sector 2048 to 5860532224
- "-t 1:8300": Partition type will be "Linux filesystem"
- "-c 1:"My stuff"" is just a human readable name you can give the partition.
Let's see how to get the values for this command:
- The end sector is calculated, by taking the last usable sector (from "sgdisk -p" output), which is "5860533134", then divide this by 4096 (=your sector size) and multiply the result (without decimal places) again with 4096 and subtract "1". As formular it might look like: (int(last_usable_sector/4096) * 4096) -1
The result is: "5860532223" - The partition types can be listed with "sgdisk -L". There you have a line saying: "8300 Linux filesystem"
The output should look like this:
Code: Select all
Disk /dev/sdd: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): D6A65FFD-D1B0-4FEA-BE3A-2DB964B82C29
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2925 sectors (1.4 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 5860532223 2.7 TiB 8300 My stuff
Code: Select all
sudo mkfs.ext4 -m 0 -b 4096 /dev/sdd1
- "-b 4096" sets a blocksize of 4096
- "-m 0" is used to reserve 0% for root. The default value would be 5%.
To reserve space for root is a great feature for system partitions, but not for storage. Since this disk is intended for pure user-storage, 5% would be 135 GiB unusable by anyone else but root.