What directories on Ubuntu aren't actually on the Hard Drive? [duplicate]

Solution 1:

To list all mounted file systems and their mount point directories that are virtual i.e. not backed by a physical disk storage, you can parse the output of the mount command.

For simplicity, I'm only filtering out all mounts corresponding to devices starting with /dev/sd or /dev/mmcblk, which should cover most hard disk partitions and removable media. This is not perfect, because you might possibly have devices that show up differently which would then not get filtered out, but as you later still see what was mounted in the output, I prefer false positive results here over false negatives. If you notice you need to add something, simply add it to the regular expression pattern of the first grep command, inside the (...) brackets and separated from the other filtered line beginnings with a | pipe.

mount | grep -vE '^(/dev/sd|/dev/mmcblk)' | grep -oE '\S+ on \S+' | sort -k3 | column -t

This will result in a list of mounts, like that one on my example machine:

$ mount | grep -vE '^(/dev/sd|/dev/mmcblk)' | grep -oE '\S+ on \S+' | sort -k3 | column -t
udev           on  /dev
hugetlbfs      on  /dev/hugepages
mqueue         on  /dev/mqueue
devpts         on  /dev/pts
tmpfs          on  /dev/shm
proc           on  /proc
binfmt_misc    on  /proc/sys/fs/binfmt_misc
systemd-1      on  /proc/sys/fs/binfmt_misc
tmpfs          on  /run
cgmfs          on  /run/cgmanager/fs
hugetlbfs-kvm  on  /run/hugepages/kvm
tmpfs          on  /run/lock
tmpfs          on  /run/user/1000
gvfsd-fuse     on  /run/user/1000/gvfs
sysfs          on  /sys
efivarfs       on  /sys/firmware/efi/efivars
tmpfs          on  /sys/fs/cgroup
cgroup         on  /sys/fs/cgroup/blkio
cgroup         on  /sys/fs/cgroup/cpu,cpuacct
cgroup         on  /sys/fs/cgroup/cpuset
cgroup         on  /sys/fs/cgroup/devices
cgroup         on  /sys/fs/cgroup/freezer
cgroup         on  /sys/fs/cgroup/hugetlb
cgroup         on  /sys/fs/cgroup/memory
cgroup         on  /sys/fs/cgroup/net_cls,net_prio
cgroup         on  /sys/fs/cgroup/perf_event
cgroup         on  /sys/fs/cgroup/pids
cgroup         on  /sys/fs/cgroup/systemd
fusectl        on  /sys/fs/fuse/connections
pstore         on  /sys/fs/pstore
debugfs        on  /sys/kernel/debug
securityfs     on  /sys/kernel/security
none           on  /tmp

This listing should show all paths on the right where you have a virtual file system mounted and the corresponding type of file system on the left. As mentioned above, due to filtering /dev/sd* only, there might be some false positive results in the list.

So from that list we can conclude that /dev, /proc, /run, /sys and /tmp are purely virtual. Note that while the first four directories are virtual on all Ubuntu installations, /tmp is normally stored on he hard disk unless you manually make it a tmpfs like I did. It should never be included into a backup anyway though.

If you want a way to reduce that list of paths and filter out all those which are only subdirectories of already mentioned paths (like e.g. /dev/pts can be omitted because /dev is already listed), look at Having a list of paths, how can I filter out subdirectories of previously mentioned paths?

Solution 2:

This really depends on how you are going to restore your system. If you will rebuild then you only need the configuration/data files for your services (eg: /etc, /opt, /var, /home)

If you are after a full system restore, then it you could omit /proc, /boot & /dev. Then you can install the minimum OS from your boot media and then restore your system via your backup.

https://serverfault.com/questions/74696/linux-what-directories-should-i-exclude-when-backing-up-a-server