Storage
Disks, partitions, mounting, fstab, BTRFS, LVM, swap, SMART, USB and LUKS.
Inspect
Block device tree:
lsblkWith filesystem info:
lsblk -fCustom columns:
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,UUIDDetailed partition info:
sudo fdisk -lFilesystem usage:
df -hInode usage:
df -iUUIDs and labels:
sudo blkidGet one UUID:
blkid -s UUID -o value /dev/sda1Symlinks by UUID/id/label:
ls -l /dev/disk/by-uuid/
Mount / umount
Mount partition:
sudo mount /dev/sdb1 /mntMount by UUID:
sudo mount UUID="xxxx-xxxx" /mntMount with type:
sudo mount -t ext4 /dev/sdb1 /mntMount read-only:
sudo mount -o ro /dev/sdb1 /mntRemount with new opts:
sudo mount -o remount,rw /mntMount ISO file:
sudo mount -o loop image.iso /mnt/isoMount tmpfs (RAM):
sudo mount -t tmpfs -o size=2G tmpfs /mnt/ramdiskMount NFS:
sudo mount -t nfs server:/share /mnt/nfsUnmount:
sudo umount /mntLazy unmount (detach when free):
sudo umount -l /mntShow mounts:
findmntFind who’s holding a mount:
fuser -mv /mntorlsof +D /mnt
fstab
File:
/etc/fstabTest entries without rebooting:
sudo mount -aReload systemd-generated mounts:
sudo systemctl daemon-reloadExample line:
UUID=xxxx-xxxx / ext4 defaults,noatime 0 1 UUID=yyyy-yyyy /home ext4 defaults 0 2 UUID=zzzz-zzzz /boot vfat defaults,umask=0077 0 2 tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
| Option | Meaning |
|---|---|
defaults | rw, suid, dev, exec, auto, nouser, async |
noatime | no access-time updates (faster) |
nofail | don’t fail boot if device missing |
x-systemd.automount | mount on first access |
discard | enable TRIM (SSDs) |
compress=zstd | BTRFS compression |
Partitioning
Interactive (MBR/GPT):
sudo fdisk /dev/sdbGPT-only:
sudo gdisk /dev/sdbScriptable:
sudo parted /dev/sdb mklabel gpt sudo parted /dev/sdb mkpart primary ext4 1MiB 100GiB sudo parted /dev/sdb resizepart 2 200GiB
Format
ext4:
sudo mkfs.ext4 -L data /dev/sdb1BTRFS:
sudo mkfs.btrfs -L data /dev/sdb1FAT32 (EFI):
sudo mkfs.fat -F32 /dev/sdb1XFS:
sudo mkfs.xfs /dev/sdb1Swap:
sudo mkswap /dev/sdb2 && sudo swapon /dev/sdb2
BTRFS
Create + mount with compression:
sudo mkfs.btrfs -L btrfs-data /dev/sdb1 sudo mount -o compress=zstd,noatime /dev/sdb1 /mnt/dataCreate subvolume:
sudo btrfs subvolume create /mnt/data/@homeList subvolumes:
sudo btrfs subvolume list /mnt/dataMount subvolume:
sudo mount -o subvol=@home /dev/sdb1 /homeRead-only snapshot (for backups):
sudo btrfs subvolume snapshot -r /mnt/data/@ /mnt/data/@snapshots/$(date +%F)Filesystem usage:
sudo btrfs filesystem usage /mnt/dataScrub (verify checksums):
sudo btrfs scrub start /mnt/data && sudo btrfs scrub status /mnt/dataBalance:
sudo btrfs balance start /mnt/dataDefragment:
sudo btrfs filesystem defragment -r /mnt/data
LVM
PV → VG → LV.
Create PV:
sudo pvcreate /dev/sdb1Create VG:
sudo vgcreate myvg /dev/sdb1 /dev/sdc1Create LV (fixed size):
sudo lvcreate -L 50G -n mylv myvgCreate LV (rest of VG):
sudo lvcreate -l 100%FREE -n mylv myvgFormat + mount:
sudo mkfs.ext4 /dev/myvg/mylv && sudo mount /dev/myvg/mylv /mnt/lvmShow:
sudo pvs && sudo vgs && sudo lvsGrow LV + filesystem:
sudo lvextend -L +10G --resizefs /dev/myvg/mylvLVM snapshot:
sudo lvcreate -L 5G -s -n mysnap /dev/myvg/mylvRemove (reverse order):
sudo lvremove /dev/myvg/mylv sudo vgremove myvg sudo pvremove /dev/sdb1
Swap
Show:
swapon --showorfree -hFile-based 4 GiB swap:
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfileDisable:
sudo swapoff /swapfileTune swappiness:
sudo sysctl vm.swappiness=10(persist in/etc/sysctl.d/99-swappiness.conf)
SMART
Install smartmontools.
Drive info + SMART support:
sudo smartctl -i /dev/sdaEnable SMART:
sudo smartctl -s on /dev/sdaFull attributes/error log:
sudo smartctl -a /dev/sdaQuick health (PASSED/FAILED):
sudo smartctl -H /dev/sdaShort self-test:
sudo smartctl -t short /dev/sdaLong self-test:
sudo smartctl -t long /dev/sdaNVMe:
sudo smartctl -a /dev/nvme0Auto monitoring:
sudo systemctl enable --now smartd
Disk usage
One directory size:
du -sh /home/joTop-level breakdown sorted:
du -h --max-depth=1 /home/jo | sort -hrLargest files:
find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -20Interactive:
ncdu /home
USB drive (ext4 / regular)
Mount:
sudo mount --mkdir /dev/sda1 /mnt/usbstickUnmount:
sudo umount /mnt/usbstick
USB drive (FAT/exFAT — preserve ownership)
Without uid/gid, FAT mounts as root-owned:
- Mount with user ownership:
sudo mount -o uid=1000,gid=1000,umask=002 /dev/sda1 /mnt/usbstick
LUKS encrypted drive
Initialize (destructive!):
sudo cryptsetup luksFormat --type luks2 /dev/sda1Open (maps to
/dev/mapper/backup):sudo cryptsetup open /dev/sda1 backupMount opened volume:
sudo mount --mkdir /dev/mapper/backup /mnt/backupUnmount and close:
sudo umount /mnt/backup && sudo cryptsetup close backupInspect headers:
sudo cryptsetup luksDump /dev/sda1
borg backup (to encrypted or plain mount)
Initialize:
borg init --encryption=none /mnt/backup/arch_backupCreate backup:
sudo borg create --verbose --stats --progress \ --exclude-from /etc/borg-exclude \ /mnt/backup/arch_backup::"$(hostname)-$(date +%Y-%m-%d-%H%M%S)" \ /
rsync (e.g. sync music to DAP)
Dry run first:
rsync -avh --info=progress2 --dry-run /mnt/storage/Music/ /mnt/dap/For real:
rsync -avh --info=progress2 /mnt/storage/Music/ /mnt/dap/