Ok folks, is it possible to extend the Raspi debian root partition on the fly from command line?
It's an 8gb sd card so there's plenty of space on there, I know a few peeps seem to be using gparted on laptops, but i'm ssh'ing remotely to the raspi.
I know I could just create new partitions/lvols and just mount /home /tmp, etc separately, but I want to know if it's possible to extend / dynamically.
Thanks in advance.
Re: Dynamically extend the root partition
yes it's possible although i'd personally do it on another linux computer rather than on a running system (but that's just me) and it's not really something you should do as a beginner but you have to start somewhere so if you don't mind trashing your sd card and having to redo it then go for it
you need to change the partition size using fdisk and then use resize2fs to shrink/expand the partition.
so something like
sudo fdisk /dev/mmcblk0
delete the partition and then recreate it but with a larger size
resize2fs /dev/mmclk0p2
see http://linux.die.net/man/8/resize2fs
you need to change the partition size using fdisk and then use resize2fs to shrink/expand the partition.
so something like
sudo fdisk /dev/mmcblk0
delete the partition and then recreate it but with a larger size
resize2fs /dev/mmclk0p2
see http://linux.die.net/man/8/resize2fs
Re: Dynamically extend the root partition
I'm used to using lvextend n fsadm on hp-ux to do this, but i'm still fairly green to linux, i'll have a play on a vm and see how it goes.
Thanks for the info.
Thanks for the info.
Re: Dynamically extend the root partition
n3tw0rk5 said:
I'm used to using lvextend n fsadm on hp-ux to do this
you should have no problem then
I'm used to using lvextend n fsadm on hp-ux to do this
you should have no problem then
Re: Dynamically extend the root partition
n3tw0rk5 said:
I know I could just create new partitions/lvols and just mount /home /tmp, etc separately, but I want to know if it's possible to extend / dynamically.
Here's what I did (copied from a post on the Debian forum) to manually resize the partiton. I don't know about automatic resizing.
I did this on Ubuntu, with the card as /dev/sdd.
Start with the SD card image written to the card, in a card reader, but with nothing mounted.
$ sudo parted /dev/sdd
(parted) unit chs
(parted) print
(this gave me:)
Model: Generic- SD/MMC (scsi)
Disk /dev/sdd: 121535,3,31
Sector size (logical/physical): 512B/512B
BIOS cylinder,head,sector geometry: 121536,4,32. Each cylinder is 65.5kB.
Partition Table: msdos
Number Start End Type File system Flags
1 16,0,0 1215,3,31 primary fat32 lba
2 1232,0,0 26671,3,31 primary ext4
3 26688,0,0 29743,3,31 primary linux-swap(v1)
(Then carry on…)
(parted) move 3 118479,0,0
(parted) rm 2
(parted) mkpart primary 1232,0,0 118478,3,31
(parted) quit
$ sudo e2fsck -f /dev/sdd2
(allow it to add lost-and-found)
$ sudo resize2fs /dev/sdd2
Then put the card in the RPi and boot. You end up with a 7Gb partition…
$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 94M 4.0K 94M 1% /lib/init/rw
udev 10M 168K 9.9M 2% /dev
tmpfs 94M 0 94M 0% /dev/shm
rootfs 7.1G 1.3G 5.4G 20% /
/dev/mmcblk0p1 75M 28M 48M 37% /boot
I know I could just create new partitions/lvols and just mount /home /tmp, etc separately, but I want to know if it's possible to extend / dynamically.
Here's what I did (copied from a post on the Debian forum) to manually resize the partiton. I don't know about automatic resizing.
I did this on Ubuntu, with the card as /dev/sdd.
Start with the SD card image written to the card, in a card reader, but with nothing mounted.
$ sudo parted /dev/sdd
(parted) unit chs
(parted) print
(this gave me:)
Model: Generic- SD/MMC (scsi)
Disk /dev/sdd: 121535,3,31
Sector size (logical/physical): 512B/512B
BIOS cylinder,head,sector geometry: 121536,4,32. Each cylinder is 65.5kB.
Partition Table: msdos
Number Start End Type File system Flags
1 16,0,0 1215,3,31 primary fat32 lba
2 1232,0,0 26671,3,31 primary ext4
3 26688,0,0 29743,3,31 primary linux-swap(v1)
(Then carry on…)
(parted) move 3 118479,0,0
(parted) rm 2
(parted) mkpart primary 1232,0,0 118478,3,31
(parted) quit
$ sudo e2fsck -f /dev/sdd2
(allow it to add lost-and-found)
$ sudo resize2fs /dev/sdd2
Then put the card in the RPi and boot. You end up with a 7Gb partition…
$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 94M 4.0K 94M 1% /lib/init/rw
udev 10M 168K 9.9M 2% /dev
tmpfs 94M 0 94M 0% /dev/shm
rootfs 7.1G 1.3G 5.4G 20% /
/dev/mmcblk0p1 75M 28M 48M 37% /boot
Re: Dynamically extend the root partition
NeilNjae said:
Number Start End Type File system Flags
1 16,0,0 1215,3,31 primary fat32 lba
2 1232,0,0 26671,3,31 primary ext4
3 26688,0,0 29743,3,31 primary linux-swap(v1)
Perhaps the swap partition could be moved before the main partition in the next version of the official image?
Might make it more trival to extend the root partition from within the system by users who might not have access to a normal Linux computer to perform the operation.
resize2fs is also known to work fine on mounted live systems.
But with the swap partition behind, swap has to be disabled first and the swap partition moved. Which is potentially dangerous if a novice user has other windows open, is close to the memory limit, and then launches a file system modifying utility that might be killed by the kernel for running low of memory.
Number Start End Type File system Flags
1 16,0,0 1215,3,31 primary fat32 lba
2 1232,0,0 26671,3,31 primary ext4
3 26688,0,0 29743,3,31 primary linux-swap(v1)
Perhaps the swap partition could be moved before the main partition in the next version of the official image?
Might make it more trival to extend the root partition from within the system by users who might not have access to a normal Linux computer to perform the operation.
resize2fs is also known to work fine on mounted live systems.
But with the swap partition behind, swap has to be disabled first and the swap partition moved. Which is potentially dangerous if a novice user has other windows open, is close to the memory limit, and then launches a file system modifying utility that might be killed by the kernel for running low of memory.
Re: Dynamically extend the root partition
I've managed to use gparted to move the swap partition out of the way (To the end of the SD card) but what is the command to resize the mounted root partition to the end of unallocated space?
resize2fs just reports there is nothing todo.
Many Thanks
Mark
resize2fs just reports there is nothing todo.
Many Thanks
Mark
Re: Dynamically extend the root partition
MarkyMark said:
I've managed to use gparted to move the swap partition out of the way (To the end of the SD card) but what is the command to resize the mounted root partition to the end of unallocated space?
gparted may refuse to touch the live root partition, but sfdisk has less moral issues.
If swap is already out of the way:
pi@raspberrypi:~$ sudo sfdisk -N2 --no-reread /dev/sda
Disk /dev/sda: 45013 cylinders, 4 heads, 32 sectors/track
Old situation:
Units = cylinders of 65536 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sda1 16 1215 1200 76800 c W95 FAT32 (LBA)
/dev/sda2 1232 26671 25440 1628160 83 Linux
/dev/sda3 41952 45007 3056 195584 82 Linux swap / Solaris
/dev/sda4 0 - 0 0 0 Empty
Input in the following format; absent fields get a default value.
<start> <size> <type [E,S,L,X,hex]> <bootable [-,*]> <c,h,s> <c,h,s>
Usually you only need to specify <start> and <size> (and perhaps <type>).
>> The main partition /dev/sda2 starts at 1232
>> in my example the moved swap partition starts at 41952. So the maximum size of /dev/sda2 could be 41952 - 1232 = 40720. make sure you do your own calculation
>> Enter the start and the size you calculated separated by spaces.
/dev/sda2 :1232 40720
/dev/sda2 1232 41951 40720 2606080 83 Linux
New situation:
Units = cylinders of 65536 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sda1 16 1215 1200 76800 c W95 FAT32 (LBA)
/dev/sda2 1232 41951 40720 2606080 83 Linux
/dev/sda3 41952 45007 3056 195584 82 Linux swap / Solaris
/dev/sda4 0 - 0 0 0 Empty
Warning: no primary partition is marked bootable (active)
This does not matter for LILO, but the DOS MBR will not boot this disk.
Do you want to write this to disk? [ynq] y
Successfully wrote the new partition table
Re-reading the partition table ...
BLKRRPART: Device or resource busy
The command to re-read the partition table failed.
Run partprobe(8), kpartx(8) or reboot your system now,
before using mkfs
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
pi@raspberrypi:~$ sudo reboot
pi@raspberrypi:~$ sudo resize2fs /dev/sda2
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/sda2 to 651520 (4k) blocks.
The filesystem on /dev/sda2 is now 651520 blocks long.
I've managed to use gparted to move the swap partition out of the way (To the end of the SD card) but what is the command to resize the mounted root partition to the end of unallocated space?
gparted may refuse to touch the live root partition, but sfdisk has less moral issues.
If swap is already out of the way:
pi@raspberrypi:~$ sudo sfdisk -N2 --no-reread /dev/sda
Disk /dev/sda: 45013 cylinders, 4 heads, 32 sectors/track
Old situation:
Units = cylinders of 65536 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sda1 16 1215 1200 76800 c W95 FAT32 (LBA)
/dev/sda2 1232 26671 25440 1628160 83 Linux
/dev/sda3 41952 45007 3056 195584 82 Linux swap / Solaris
/dev/sda4 0 - 0 0 0 Empty
Input in the following format; absent fields get a default value.
<start> <size> <type [E,S,L,X,hex]> <bootable [-,*]> <c,h,s> <c,h,s>
Usually you only need to specify <start> and <size> (and perhaps <type>).
>> The main partition /dev/sda2 starts at 1232
>> in my example the moved swap partition starts at 41952. So the maximum size of /dev/sda2 could be 41952 - 1232 = 40720. make sure you do your own calculation
>> Enter the start and the size you calculated separated by spaces.
/dev/sda2 :1232 40720
/dev/sda2 1232 41951 40720 2606080 83 Linux
New situation:
Units = cylinders of 65536 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sda1 16 1215 1200 76800 c W95 FAT32 (LBA)
/dev/sda2 1232 41951 40720 2606080 83 Linux
/dev/sda3 41952 45007 3056 195584 82 Linux swap / Solaris
/dev/sda4 0 - 0 0 0 Empty
Warning: no primary partition is marked bootable (active)
This does not matter for LILO, but the DOS MBR will not boot this disk.
Do you want to write this to disk? [ynq] y
Successfully wrote the new partition table
Re-reading the partition table ...
BLKRRPART: Device or resource busy
The command to re-read the partition table failed.
Run partprobe(8), kpartx(8) or reboot your system now,
before using mkfs
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
pi@raspberrypi:~$ sudo reboot
pi@raspberrypi:~$ sudo resize2fs /dev/sda2
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/sda2 to 651520 (4k) blocks.
The filesystem on /dev/sda2 is now 651520 blocks long.
-
- Posts: 39
- Joined: Mon Mar 19, 2012 12:05 am
Re: Dynamically extend the root partition
I have used gparted in X (I can't remember the commands of the terminal, and it is much easier to just slide the swap to the right then grab the right edge of the main and expand it to the end.
However, I always did this while booted from another SD card, with the card I was editing in a USB SD reader.
Can you do this live?
However, I always did this while booted from another SD card, with the card I was editing in a USB SD reader.
Can you do this live?
Re: Dynamically extend the root partition
woodinblack said:
I have used gparted in X (I can't remember the commands of the terminal, and it is much easier to just slide the swap to the right then grab the right edge of the main and expand it to the end.
However, I always did this while booted from another SD card, with the card I was editing in a USB SD reader.
Can you do this live?
gparted is in the menu under "Preferences". But it is too protective, shows a lock icon next to the live root file system and will not let you modify it.
sfdisk+resize2fs does allow you that.
I have used gparted in X (I can't remember the commands of the terminal, and it is much easier to just slide the swap to the right then grab the right edge of the main and expand it to the end.
However, I always did this while booted from another SD card, with the card I was editing in a USB SD reader.
Can you do this live?
gparted is in the menu under "Preferences". But it is too protective, shows a lock icon next to the live root file system and will not let you modify it.
sfdisk+resize2fs does allow you that.
-
- Posts: 39
- Joined: Mon Mar 19, 2012 12:05 am
Re: Dynamically extend the root partition
Max said:
gparted is in the menu under "Preferences". But it is too protective, shows a lock icon next to the live root file system and will not let you modify it.
sfdisk+resize2fs does allow you that.
On mine it is under other, but I start it from the terminal, as it doesn't start from the menu without requiring a password to an account that doesn't exist.
Does sfdisk+resize2fs have a UI then?
I was actually just knocking up an OSX app to expand the partition while writing it anyway.
gparted is in the menu under "Preferences". But it is too protective, shows a lock icon next to the live root file system and will not let you modify it.
sfdisk+resize2fs does allow you that.
On mine it is under other, but I start it from the terminal, as it doesn't start from the menu without requiring a password to an account that doesn't exist.
Does sfdisk+resize2fs have a UI then?
I was actually just knocking up an OSX app to expand the partition while writing it anyway.
- [email protected]
- Posts: 2024
- Joined: Tue Feb 07, 2012 2:14 pm
- Location: Devon, UK
Re: Dynamically extend the root partition
Bit late to reply but I put some stuff here
https://projects.drogon.net/raspberry-p ... al-setup1/
about repartitioning, etc.
What I've done is to delete the swap partition and replace it with a file - you just need a small swap file, if that - it's really really slow when it swaps, so sort of self-defeating, however a little bit of swap cane free up enough RAM for file/disk IO buffers to make things a little smoother.
Gordon
https://projects.drogon.net/raspberry-p ... al-setup1/
about repartitioning, etc.
What I've done is to delete the swap partition and replace it with a file - you just need a small swap file, if that - it's really really slow when it swaps, so sort of self-defeating, however a little bit of swap cane free up enough RAM for file/disk IO buffers to make things a little smoother.
Gordon
--
Gordons projects: https://projects.drogon.net/
Gordons projects: https://projects.drogon.net/
Re: Dynamically extend the root partition
Max/GordonH/All
Many thanks for all that info - worked a treat!! Now go plenty of space. Gordon - your tut is v good
Cheers
Mark
Many thanks for all that info - worked a treat!! Now go plenty of space. Gordon - your tut is v good
Cheers
Mark
Re: Dynamically extend the root partition
Bit late to reply but I put some stuff here
https://projects.drogon.net/raspberry-p ... al-setup1/
about repartitioning, etc.
What I"ve done is to delete the swap partition and replace it with a file - you just need a small swap file, if that - it"s really really slow when it swaps, so sort of self-defeating, however a little bit of swap cane free up enough RAM for file/disk IO buffers to make things a little smoother.
Gordon
A superb set of instructions that should be merged into the official newbie guide. Much appreciated Gordon.
https://projects.drogon.net/raspberry-p ... al-setup1/
about repartitioning, etc.
What I"ve done is to delete the swap partition and replace it with a file - you just need a small swap file, if that - it"s really really slow when it swaps, so sort of self-defeating, however a little bit of swap cane free up enough RAM for file/disk IO buffers to make things a little smoother.
Gordon
A superb set of instructions that should be merged into the official newbie guide. Much appreciated Gordon.
Re: Dynamically extend the root partition
I followed the hints here but when I try resize2fs I get this:
pi@raspberrypi:~$ sudo resize2fs /dev/mmcblk0p2
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
resize2fs: Permission denied to resize filesystem
Does anybody know why?
pi@raspberrypi:~$ sudo resize2fs /dev/mmcblk0p2
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
resize2fs: Permission denied to resize filesystem
Does anybody know why?
-
- Posts: 4277
- Joined: Sun Jan 15, 2012 1:11 pm
Re: Dynamically extend the root partition
I know the focus here is on doing it while the machine is on - i.e., live (insert the car mechanic/surgeon joke here) - but it really is easier to do it "offline" - that is, from a running Linux system other than the Pi.
It occurs to me that you ought to be able to do this all manually, with a lot less risk (and by "risk", I mean the need to blindly follow a bunch of cryptic instructions with the knowledge that any typo could be fatal). I don't mean to imply that my instructions won't be cryptic (to the non-Linux user), but at least the overall scheme makes sense and doesn't feel like walking a tightrope.
So, suppose we have a 16Gb SD card and a 2GB Debian image, and we are running on a Linux system with the SD card at /dev/sdd. So, we use fdisk to partition the SD card, first removing whatever FAT partition was there from the factory. We create 3 partitions, in order, a 75M FAT partition, a 200M Linux swap partition (type 82), and the rest as Linux (type 83). We mount the first partition of the image using loop, and, after mkdosfs'ing the first partition, mkswap'ing the second, and mke2fs'ing the third, we copy all the files from partition of the image to the first partition of the card - and change cmdline.txt to use the 3rd, not second partition as root. Then we mount the second partition of the image using loop and copy everything from there to the 3rd partition on the card.
Then we should be done...
It occurs to me that you ought to be able to do this all manually, with a lot less risk (and by "risk", I mean the need to blindly follow a bunch of cryptic instructions with the knowledge that any typo could be fatal). I don't mean to imply that my instructions won't be cryptic (to the non-Linux user), but at least the overall scheme makes sense and doesn't feel like walking a tightrope.
So, suppose we have a 16Gb SD card and a 2GB Debian image, and we are running on a Linux system with the SD card at /dev/sdd. So, we use fdisk to partition the SD card, first removing whatever FAT partition was there from the factory. We create 3 partitions, in order, a 75M FAT partition, a 200M Linux swap partition (type 82), and the rest as Linux (type 83). We mount the first partition of the image using loop, and, after mkdosfs'ing the first partition, mkswap'ing the second, and mke2fs'ing the third, we copy all the files from partition of the image to the first partition of the card - and change cmdline.txt to use the 3rd, not second partition as root. Then we mount the second partition of the image using loop and copy everything from there to the 3rd partition on the card.
Then we should be done...
And some folks need to stop being fanboys and see the forest behind the trees.
(One of the best lines I've seen on this board lately)
(One of the best lines I've seen on this board lately)
- RaspberryPiBeginners
- Posts: 224
- Joined: Fri May 11, 2012 6:54 am
- Location: Soham, Cambridgeshire
Re: Dynamically extend the root partition
http://www.youtube.com/watch?v=R4VovMDnsIE << this Video will show you step by step how to do exactly this.
Click here for my unofficial YouTube Channel > http://goo.gl/oFYBD
-
- Posts: 1
- Joined: Tue Jun 12, 2012 3:28 pm
Re: Dynamically extend the root partition
Followed the video, worked great apart from re-creating the swap file.
My 'top' shows zeros across the swap line and then 98M cached.
i've also heard a rumour of a utility in the bundle that allows you to do this automatically?
My 'top' shows zeros across the swap line and then 98M cached.
i've also heard a rumour of a utility in the bundle that allows you to do this automatically?
Re: Dynamically extend the root partition
Hello everybody!
I need help, because your writings didn't really work at my raspi.
First I tried to resize with the first boot config menu. I set to automatically resize the partition in the next boot-up process. I got an error message: "Invalid argument, While trying to add group #25"
Resize2fs continously try to resize my 16Gbyte sd card with every boot-up, with no success.
I tried manually based upon the youtube video, but at the end (with resize2fs), I always get the same error message. Is there anyone, who knows what to do in this case? This situation is quite annoying.
I need help, because your writings didn't really work at my raspi.
First I tried to resize with the first boot config menu. I set to automatically resize the partition in the next boot-up process. I got an error message: "Invalid argument, While trying to add group #25"
Resize2fs continously try to resize my 16Gbyte sd card with every boot-up, with no success.
I tried manually based upon the youtube video, but at the end (with resize2fs), I always get the same error message. Is there anyone, who knows what to do in this case? This situation is quite annoying.
Re: Dynamically extend the root partition
Hello again!
I've got solution for the problem.
Autoresize from raspi-config sux! Doesn't worked with my 16gig ultrafast sdhc card.
Manually doing the resize I made something wrong. With fdisk, I wrote wrong last sector number for the Linux partition. I used the very last sector indicating the end of the partition table, however, you must to use the last before the very last sector to sign the end of linux partition. That's why resize2fs didn't work for me manually. Hope, you will have much less problem with this.
Good summarizing link for resizing the raspi:
http://elinux.org/RPi_Resize_Flash_Partitions
Good luck!
I've got solution for the problem.
Autoresize from raspi-config sux! Doesn't worked with my 16gig ultrafast sdhc card.
Manually doing the resize I made something wrong. With fdisk, I wrote wrong last sector number for the Linux partition. I used the very last sector indicating the end of the partition table, however, you must to use the last before the very last sector to sign the end of linux partition. That's why resize2fs didn't work for me manually. Hope, you will have much less problem with this.
Good summarizing link for resizing the raspi:
http://elinux.org/RPi_Resize_Flash_Partitions
Good luck!
Re: Dynamically extend the root partition
Hi!
I get the exact same error from resize2fs, "Invalid argument, While trying to add group #25".
I've tried both raspi-configs option to exapnd and to manually expand with fdisk (https://projects.drogon.net/raspberry-p ... al-setup1/). I used the second last sector as end of the partition, actually hitting enter to let fdisk set it.
I'm running the recommended wheezy on a Kingston 32GB class 10 card.
Any suggestions how to get my partition to expand?
Regards,
Relnah
I get the exact same error from resize2fs, "Invalid argument, While trying to add group #25".
I've tried both raspi-configs option to exapnd and to manually expand with fdisk (https://projects.drogon.net/raspberry-p ... al-setup1/). I used the second last sector as end of the partition, actually hitting enter to let fdisk set it.
I'm running the recommended wheezy on a Kingston 32GB class 10 card.
Any suggestions how to get my partition to expand?
Regards,
Relnah
Re: Dynamically extend the root partition
Hi!
Just wanted to post what solved my problem.
Re write the image
I'm guessing I cut the power before the resize was done the very first time I did it and it could never really recover from that.
I re-wrote the image and ran raspi-config expanding the fs. On reboot I waited until the act led had been off for a minute or so. It was constantly on for somewhere between 30 min and an hour.
Regards,
Relnah
Just wanted to post what solved my problem.
Re write the image

I'm guessing I cut the power before the resize was done the very first time I did it and it could never really recover from that.
I re-wrote the image and ran raspi-config expanding the fs. On reboot I waited until the act led had been off for a minute or so. It was constantly on for somewhere between 30 min and an hour.
Regards,
Relnah