Formatting a USB Drive with ext4 for Use with Linux
I wish to use an external USB drive exclusively on a Linux system (in my case, Debian). I want to use the ext4 filesystem. Note that this method wipes out the filesystem on the drive.
Install hotplug-type package such that upon plugging the USB drive in the device is attached to somewhere in the system. I use KDE and it automatically prepares such an environment. When a USB drive is plugged in, I should see a message like this one in the system log:
$ sudo tail /var/log/messages
Dec 16 02:07:51 kernel: [ 3000.544361] scsi11 : usb-storage 3-2:1.0
...
Dec 16 02:07:56 mochi kernel: [ 3005.882879] sdb: sdb1
...
or I may see something like this instead (I’m using USB 3.0 adapter now):
$ sudo tail -n 100 /var/log/messages | grep sd
...
May 3 12:38:33 mochi kernel: [ 12.773057] sd 6:0:0:0: [sdb] Spinning up disk...
May 3 12:38:39 mochi kernel: [ 18.782284] sd 6:0:0:0: [sdb] 3906963456 512-byte logical blocks: (2.00 TB/1.81 TiB)
May 3 12:38:39 mochi kernel: [ 18.783052] sd 6:0:0:0: [sdb] Write Protect is off
May 3 12:38:39 mochi kernel: [ 18.794337] sdb: sdb1
May 3 12:38:39 mochi kernel: [ 18.795569] sd 6:0:0:0: [sdb] Attached SCSI disk
Here, I find the device is at /dev/sdb and there is only one partition, /dev/sdb1, for example. I can also see all the disk devices as follows:
$ sudo fdisk -l
Disk /dev/sda: 80.0 GB, 80026361856 bytes
240 heads, 63 sectors/track, 10337 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xbd3cc0bb
Device Boot Start End Blocks Id System
/dev/sda1 1 10338 78149633 5 Extended
/dev/sda5 1 46 340992 83 Linux
/dev/sda6 46 52 48128 83 Linux
/dev/sda7 52 698 4881408 83 Linux
/dev/sda8 698 1086 2928640 83 Linux
/dev/sda9 1086 1861 5858304 83 Linux
/dev/sda10 1861 2830 7323648 83 Linux
/dev/sda11 9305 10338 7812096 82 Linux swap / Solaris
/dev/sda12 2830 9304 48949248 83 Linux
Partition table entries are not in disk order
Disk /dev/sdb: 2000.4 GB, 2000365289472 bytes
255 heads, 63 sectors/track, 243197 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005f107
Device Boot Start End Blocks Id System
/dev/sdb1 1 243198 1953480704 7 HPFS/NTFS
When the USB drive is new, the partition is most likely formatted in FAT or NTFS unless the drive is pre-formatted specifically for OS X. Now, prepare the partition for Linux:
$ sudo fdisk /dev/sdb
See help for detail by pressing m
on the fdisk
command
shell. For example, press p
to see the list of partitions in the
disk. To create a new one press n
(probably after deleting one or
more partitions by pressing d
). Finally press w
to actually make
changes to the drive. To use ext4 filesystem, do:
$ sudo mkfs.ext4 /dev/sdb1
after exiting fdisk
.
If I always mount this drive on boot, add a line like this to /etc/fstab:
/dev/sdc1 /media/usbdrive ext4 defaults 0 0
assuming /media/usbdrive is the mount point. If I use KDE, adding an entry to /etc/fstab is no longer necessary; I can easily manage external drives with Device Notifier.
Update History
Feb 20, 2014 — Updated following a comment by Ugly Mug.
May 3, 2012 — Updated for my current system.
December 17, 2010 — Modified to use ext4 filesystem.