Google Compute Engine Disk Auto-Resize Issue When Uploading Data

google-compute-enginepartition

… automatic disk resizing during boot time…
All Compute Engine Ubuntu images will automatically resize the root partition to use the entire disk, up to a 2 TB limit. Even if the disk is larger than 2 TB, the operating system only recognizes up to 2 TB.

According to Google's Persistent Disk documentation, Ubuntu should auto-resize, but when I tried to upload 20GB data (contains small files):

"No space left on device"

I'm using gcloud:

gcloud compute copy-files ...

to upload the files.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.9G  9.8G     0 100% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            1.9G  4.0K  1.9G   1% /dev
tmpfs           371M  536K  370M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            1.9G     0  1.9G   0% /run/shm
none            100M     0  100M   0% /run/user

Command (m for help): p
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x000ea22e

Device     Boot Start      End  Sectors Size Id Type
/dev/sda1  *     2048 20971519 20969472  10G 83 Linux

Best Answer

As you pointed out:

All Compute Engine Ubuntu images will automatically resize the root partition to use the entire disk

Then, as per your output, you have a 10GB disk and a 10GB partition so it's not possible to resize that partition.

If you want to have a larger root disk, you'll need to create disk with the desired space. You can do it with the Cloud SDK with the following steps:

1- Create a snapshot of your instance:

gcloud compute disks snapshot DISK_NAME --snapshot-names SNAPSHOT_NAME --zone ZONE --project PROJECT_ID

2- Create a disk based on that snapshot:

gcloud compute disks create NAME --source-snapshot SOURCE_SNAPSHOT --size SIZE --zone ZONE --project PROJECT_ID

After that the disk is automatically partitioned with enough space for the root filesystem

3- Create an instance with that disk:

gcloud compute instances create NAME --disk "name=DISK_NAME" "boot=yes" --zone ZONE --project PROJECT_ID

Since Ubuntu supports automatic resizing, once it boots it should resize the partition and you should have the desired GB.

Alternatively, if you are still able to SSH into the instance, you can attach a new disk to the instance following these steps:

4- Create a new disk: gcloud compute disks create NAME --size SIZE --zone ZONE --project PROJECT_ID

5- Attach the new disk: gcloud compute instances attach-disk INSTANCE_NAME --disk NEW_DISK_NAME --zone ZONE --project PROJECT_ID

6- SSH into the instance: gcloud compute ssh INSTANCE_NAME --zone ZONE --project PROJECT_ID

7- Format the new disk.

8- Transfer files from the root disk to the new one to free up space and upload the other files to the new disk.

Related Topic