Disks and Filesystem overview

This page provides an overview of the Container-Optimized OS from Google filesystem and describes how to mount and format disks.

Filesystem

The root filesystem is mounted as read-only to protect system integrity. However, home directories and /mnt/stateful_partition are persistent and writable.

The following is a list of paths in the Container-Optimized OS node image file system, along with their properties and recommended usage:

Path Properties Purpose
/
  • read-only
  • executable
The root filesystem is mounted as read-only to maintain integrity. The kernel verifies integrity root filesystem during boot up, and refuses to boot in case of errors.
/home
/var
  • writable
  • non-executable
  • stateful
These paths are meant for storing data that persists for the lifetime of the boot disk. They are mounted from /mnt/stateful_partition.
/var/lib/google
/var/lib/docker
/var/lib/toolbox
  • writable
  • executable
  • stateful
These paths are working directories for Compute Engine packages (for example, the accounts manager service), Docker, and Toolbox respectively.
/var/lib/cloud
  • writable
  • executable
  • stateless
  • tmpfs
This path is the working directory of the cloud-init package.
/etc
  • writable
  • non-executable
  • stateless
  • tmpfs
/etc typically holds your configuration (for example, systemd services defined via cloud-init). It's a good idea to capture the desired state of your instances in cloud-init, as cloud-init is applied when an instance is newly created as well as when an instance is restarted.
/tmp
  • writable
  • non-executable
  • stateless
  • tmpfs
/tmp is typically used as a scratch space and should not be used to store persistent data.
/mnt/disks
  • writable
  • executable
  • stateless
  • tmpfs
You can mount Persistent Disks at directories under /mnt/disks.

Mounting and formatting disks

You can attach a persistent disk or create an instance with Local SSDs when using Container-Optimized OS from Google. Follow the instructions on Formatting and mounting a persistent disk or Format and mount a local SSD device for the appropriate use-case.

The disks can be mounted by creating a subdirectory under /mnt/disks directory. Since /etc/ is stateless on Container-Optimized OS from Google, you cannot use /etc/fstab to automatically fsck (file system consistency check) and mount the disks on boot. But you can achieve the same by doing those operations from the bootcmd section in your cloud-config. For example:

#cloud-config

bootcmd:
- fsck.ext4 -tvy /dev/[DEVICE_ID]
- mkdir -p /mnt/disks/[MNT_DIR]
- mount -t ext4 -O ... /dev/[DEVICE_ID] /mnt/disks/[MNT_DIR]

where:

  • [DEVICE_ID] is the device ID of the disk that you want to format and mount.
  • [MNT_DIR] is the directory in which to mount your disk.

Please refer to the Linux documentation for a full set of options supported by the fsck.ext4 and mount commands.

For an existing instance, use the --metadata-from-file flag to update cloud-init metadata:

gcloud compute instances add-metadata instance-name \
    --metadata-from-file user-data=filename

Replace the following:

  • instance-name: the name of your VM instance.
  • filename: the name of the metadata file.