Step 1: Prerequisutes
apt-get update
apt-get install nano rpi-update raspi-config usbutils dosfstools apt-utils
Note that you need to have an external power adapter for the harddrive, as Raspberry Pi only can output 500 mA through the USB ports.
Step 2: Insert HDD
Type in “df -h” to check the file system:
root@raspiserver:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 705M 476M 179M 73% /
devtmpfs 483M 0 483M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 6.4M 481M 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mmcblk0p1 61M 20M 42M 32% /boot
Check to see if your USB harddrive is recognized by typing:
root@raspiserver:~# lsusb
Bus 001 Device 004: ID 0411:01d9 BUFFALO INC. (formerly MelCo., Inc.)
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
As you can see, the Buffalo Inc. is the 500GB harddrive I’ve attached the raspiserver.
Step 3: Formatting the Harddrive
Before we can use the harddrive, we need to format it to EXT4 instead of FAT32 or NTFS. We need to do this, as NTFS can be a bit slow when mounted as a harddrive for linux.
root@raspiserver:~# fdisk -l
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 16 125055 125040 61.1M b W95 FAT32
/dev/mmcblk0p2 125056 1626112 1501057 733M 83 Linux
Device Boot Start End Sectors Size Id Type
/dev/sda1 64 976768064 976768001 465.8G 7 HPFS/NTFS/exFAT
The harddrive is, as stated, formatted for windows on /dev/sda1. We need to change this.
root@raspiserver:~# fdisk /dev/sda1
Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help):
Enter p, the command to list the partitions.
root@raspiserver:~# fdisk /dev/sda1
Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sda1: 465.8 GiB, 500105216512 bytes, 976768001 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
Disklabel type: dos
Disk identifier: 0x73736572
Device Boot Start End Sectors Size Id Type
/dev/sda1p1 1920221984 3736432267 1816210284 866G 72 unknown
/dev/sda1p2 ? 1936028192 3889681299 1953653108 931.6G 6c unknown
/dev/sda1p3 ? 0 0 0 0B 0 Empty
/dev/sda1p4 27722122 27722568 447 223.5K 0 Empty
Partition table entries are not in disk order.
There are three partitions which we need to reformat.
Enter d to delete partion(s) and enter the value of partition you want to delete. In my case, I started with d = 4, then d = 3, d = 2 and lastly d = 1
Before closing, we need to write the changes to the disk.
Command (m for help): d
Partition number (1-4, default 4): 4
Partition 4 has been deleted.
Command (m for help): d
Partition number (1-3, default 3): 3
Partition 3 has been deleted.
Command (m for help): d
Partition number (1,2, default 2): 2
Partition 2 has been deleted.
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.
Command (m for help): p
Disk /dev/sda1: 465.8 GiB, 500105216512 bytes, 976768001 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
Disklabel type: dos
Disk identifier: 0x73736572
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Invalid argument
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
Reboot to Enable Changes
root@raspiserver:~# reboot
Step 4: Format HDD Attached to Raspberry Pi
root@raspiserver:~# mke2fs -t ext4 -L rootfs /dev/sda1
Before we can use it, we need to mount it
root@raspiserver:~# mount /dev/sda1 /mnt
… and check to see if it works
root@raspiserver:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 705M 476M 179M 73% /
devtmpfs 483M 0 483M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 6.4M 481M 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mmcblk0p1 61M 20M 42M 32% /boot
/dev/sda1 459G 70M 435G 1% /mnt
Step 5: Move Content from MicroSD to HDD on Raspberry Pi
We can move the files using dd, but the bit copy program also copies the empty space. Installing rsync so we can mirror the data.
root@raspiserver:~# apt-get install rsync
Rsync the content by typing (Please allow some time. It took me just under a minute on the Raspberry Pi 2):
root@raspiserver:~# rsync -axv / /mnt
Step 6: Change Boot Order on Raspberry Pi
We need to change the file /boot/cmdline.txt
However, please be aware that if something screws up here we need to start all over.
Start by creating a copy:
sudo cp /boot/cmdline.txt /boot/cmdline.backup
Change the file content from:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 elevator=deadline root=/dev/mmcblk0p2 rootfstype=ext4 fsck.repair=yes rootwait
To this:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait rootdelay=7 program_usb_timeout=1
We have changed the reference from the SD card (root=/dev/mmcblk0p2) to the new USB disk (root=/dev/sda1).
As the harddrive might boot up a little later than the SD card, we have added a 7 seconds wait (rootdelay=7) and added program_usb_timeout=1 to the end. Make sure it is only one line.
Next we need to alter the filesystem table:
nano /mnt/etc/fstab
Just change the line
/dev/mmcblk0p2
to
/dev/sda1
and leave the rest intact.
We leave the reference to the boot intact, so the SD card is only used for booting the raspiserver. The file should look like this:
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/sda1 / ext4 defaults,noatime 0 1
Reboot the system (and cross your fingers)
reboot
Excellent and Thanks!
Did it with DietPI, so dropped the RPI stuff.
apt-get update
apt-get install usbutils dosfstools apt-utils rsync
…
cp /boot/cmdline.txt /boot/cmdline.txt.backup
Cmdline root part changed:
root=PARTUUID=0e2887fb-02 rootfstype=ext4 rootwait fbcon=map:10 fbcon=font:ProFont6x11 fsck.repair=yes net.ifnames=0 logo.nologo quiet console=tty1
Get rid of the SD partition:
umount /dev/mmcblk0p2
fstab:
PARTUUID=0e2887fb-02 / ext4 noatime,lazytime,rw 0 1
PARTUUID=0e2887fb-01 /boot vfat noatime,lazytime,rw 0 2
/var/swap none swap sw
reboot
If swap is not enabled and OS in readonly mode:
mount -o remount,rw /
swapon /var/swap
reboot
Now my Raspberry PI from 2011 is running with an USB-Stick!