Linux-Tutorial / Dateisysteme einhängen und Speicherverwendung diagnostizieren

Das Einhängen macht ein Dateisystem über ein Verzeichnis im Linux-Namespace zugänglich. Überprüfen Sie zuerst das Ziel und den Einhängepunkt, dann inspizieren Sie mit findmnt die tatsächliche Quelle, den Pfad und die Optionen; diagnostizieren Sie Platzmangel sowohl anhand des Byte- als auch des Inode-Verbrauchs.

Bevor Sie ein Formatziel wählen, überprüfen Sie Festplatten, Partitionen und Dateisysteme. Die untenstehende Übung verwendet nur eine neue temporäre Image-Datei.

Systemkonfigurationsübungen verwenden eine herkömmliche Ubuntu 26.04 LTS oder Rocky Linux 9 VM als Referenzumgebung. Container, WSL und andere Versionen können sich in Dienst- und Paketkonfiguration unterscheiden. Bereiten Sie die Konsolenwiederherstellung vor und zeichnen Sie Ihre Versionen mit der virtuellen Maschinen-Einrichtungslektion auf.

Verstehen, was ein Einhängepunkt verbirgt

Das Einhängen über ein nicht leeres Verzeichnis verbirgt die ursprünglichen Einträge, solange das Einhängen aktiv ist; sie werden dabei nicht gelöscht. Nach dem Aushängen tauchen sie wieder auf. Verwenden Sie einen leeren Übungseinhängepunkt und fragen Sie den genauen Pfad mit findmnt -T ab, um den Speicher zu identifizieren, der ihn derzeit unterstützt.

findmnt -T "$HOME"
df -hT "$HOME"
df -i "$HOME"

Diese Befehle zeigen das Mount, das Ihr Home-Verzeichnis enthält, dessen Speicherplatznutzung und Inode-Nutzung. Inodes stellen Dateiobjekte und zugehörige Metadaten dar; viele kleine Dateien können sie erschöpfen, selbst wenn die Byte-Kapazität noch verfügbar ist. Die Meldung von Details und Grenzen hängt vom Dateisystem ab.

Mounten, beschreiben und aushängen eines frischen Images

Führen Sie dieses eigenständige Beispiel in einer temporären VM mit sudo und ext4-Werkzeugen aus. Ein eingeschränkter Container erlaubt möglicherweise kein Mounten. Es hängt nicht von Shell-Variablen vorheriger Lektionen ab und formatiert nur eine neu erstellte Image-Datei.

Speichern Sie den vollständigen Code unten als mount-lab.sh mit LF-Zeilenenden und führen Sie bash mount-lab.sh aus. Es werden Bash, util-linux, e2fsprogs und sudo-Zugriff benötigt. Bereiten Sie die Tools mit sudo apt install util-linux e2fsprogs auf Ubuntu oder sudo dnf install util-linux e2fsprogs auf Rocky vor. Es weist explizit ein Loop-Gerät zu und schreibt nur, nachdem der genaue Einhängepunkt dieses Gerät als Quelle meldet. Vorbereitungsausfälle stoppen vor dem Schreiben.

#!/usr/bin/env bash
set -u
set -o pipefail
for tool in mktemp truncate mkfs.ext4 losetup mount umount findmnt sudo tee; do
  command -v "$tool" >/dev/null || { printf 'Missing tool: %s\n' "$tool" >&2; exit 1; }
done
sudo -v || exit 1
lab=$(mktemp -d "$HOME/linux-mount-lab.XXXXXX") || exit 1
img=$lab/disk.img
mnt=$lab/mnt
loop=''
cleanup() {
  result=$?
  trap - EXIT
  if [[ -n "$loop" ]]; then
    source=$(findmnt -rn --mountpoint "$mnt" -o SOURCE)
    lookup=$?
    if (( lookup == 0 )) && [[ "$source" == "$loop" ]]; then
      sudo umount -- "$mnt" || result=1
    elif (( lookup != 1 )); then
      printf 'Inspect mount before cleanup: %s\n' "$mnt" >&2
      result=1
    fi
    if findmnt -rn --source "$loop" >/dev/null; then
      printf 'Still mounted; keeping loop device: %s\n' "$loop" >&2
      result=1
    else
      lookup=$?
      if (( lookup == 1 )); then
        sudo losetup --detach "$loop" || result=1
      else
        printf 'Cannot verify loop usage; keeping: %s\n' "$loop" >&2
        result=1
      fi
    fi
  fi
  printf 'Lab retained for inspection: %s\n' "$lab"
  exit "$result"
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
truncate -s 128M "$img" || exit 1
mkfs.ext4 -F "$img" || exit 1
mkdir "$mnt" || exit 1
loop=$(sudo losetup --find --show "$img") || exit 1
[[ "$loop" == /dev/loop* ]] || { printf 'Unexpected loop device\n' >&2; exit 1; }
sudo mount -t ext4 -o nodev,nosuid "$loop" "$mnt" || exit 1
source=$(findmnt -rn --mountpoint "$mnt" -o SOURCE) || exit 1
[[ "$source" == "$loop" ]] || { printf 'Mount source mismatch; no write\n' >&2; exit 1; }
printf 'mounted storage\n' | sudo tee "$mnt/note.txt" >/dev/null || exit 1
cat "$mnt/note.txt" || exit 1
sudo umount -- "$mnt" || exit 1
if findmnt -rn --mountpoint "$mnt"; then
  printf 'Mount still present\n' >&2
  exit 1
else
  lookup=$?
  (( lookup == 1 )) || exit 1
fi
printf 'Unmount verified\n'

Bei Erfolg erwarten Sie mounted storage und Unmount verified. Das Beenden der Bereinigung hängt nur das verifizierte Gerät an diesem Einhängepunkt aus und trennt das Loop-Gerät nur, wenn kein Mount es noch verwendet. Fehlgeschlagene Aushänge oder Suchfehler behalten das Gerät und geben einen Fehler zurück. Das Laborverzeichnis und das Image werden immer beibehalten und ihr Pfad wird ausgegeben; ein erneutes Ausführen erstellt ein neues Verzeichnis.

Dies setzt eine persönliche Übungs-VM ohne einen anderen Administrator voraus, der gleichzeitig Mounts ändert. Es beseitigt keinen Wettlauf zwischen Quellverifikation und Schreiben. Nach einem Fehler überprüfen Sie den gedruckten Pfad mit findmnt --mountpoint und das Gerät mit sudo losetup --list; entfernen Sie keine Dateien, solange ein Mount besteht.

Einen beschäftigten Mount behandeln, ohne die Entfernung zu erzwingen

Eine Shell, deren Arbeitsverzeichnis innerhalb des Mounts liegt, eine geöffnete Datei oder ein laufender Dienst kann das Aushängen verhindern. Verschieben Sie Terminals außerhalb des Mounts und stoppen Sie das relevante Programm sauber. Falls verfügbar, verwenden Sie fuser -vm MOUNT_PATH oder lsof zur Untersuchung. Machen Sie gewaltsames Beenden oder Lazy-Unmount nicht zur Standardreaktion.

Behandeln Sie persistente Mounts als eine verifizierte Konfigurationsänderung

/etc/fstab protokolliert Quelle, Einhängungspunkt, Typ, Optionen, Dump-Flag und fsck-Reihenfolge. Gerätenamen können sich ändern, daher sollte, wo angemessen, ein stabiler Bezeichner wie eine UUID verwendet werden. Folgendes ist ein illustrativer Eintrag für ein sekundäres ext4-Dateisystem, keine Zeile zum unveränderten Einfügen oder für das temporäre Laborabbild.

UUID=REPLACE_WITH_ACTUAL_UUID /srv/data ext4 defaults,nodev,nosuid 0 2

Sichern Sie fstab und führen Sie sudo findmnt --verify --verbose aus, um Syntax und zugängliche Ziele zu überprüfen. Auf systemd-Systemen laden Sie die generierte Einheitskonfiguration mit sudo systemctl daemon-reload neu und testen dann gezielt die spezifische Einhängung. Die Überprüfung kann nicht jede zukünftige Startbedingung garantieren, daher sollte der Zugang zur Konsolenwiederherstellung beibehalten werden.

nofail kann den Start ohne ein optionales Gerät fortsetzen, verhindert jedoch nicht, dass eine Anwendung in das zugrunde liegende leere Verzeichnis schreibt. Für erforderlichen Speicher entwerfen Sie Einhängabhängigkeiten und Startbedingungen für Dienste. Wählen Sie die Optionen read-only, nodev, nosuid und noexec basierend auf der Arbeitslast, anstatt sie als universelle Sicherheitslösungen zu behandeln.

Erklären Sie die Unterschiede zwischen df/du, bevor Sie Daten löschen

df -hT
df -i
du -xhd1 "$HOME" 2>/dev/null | sort -h

df misst die Zuweisung auf Dateisystemebene; du durchläuft zugängliche Dateien. Gelöschte, aber geöffnete Dateien, nicht lesbare Pfade, reservierte Blöcke und Metadaten können Unterschiede verursachen. du -x vermeidet das Überschreiten von Dateisystemgrenzen, aber ein großer Durchlauf verursacht dennoch I/O. Unterdrückte Berechtigungsfehler bedeuten, dass die Gesamtsumme unvollständig sein kann.

Bestimmen Sie den Besitzer und die Aufbewahrungsanforderungen einer großen Datei, bevor Sie sie entfernen. Verwenden Sie gegebenenfalls die Protokollrotation oder die von der Anwendung unterstützte Cache-Bereinigung. Entfernen Sie Laborbilder nur, nachdem Sie bestätigt haben, dass sie ausgehängt sind; stellen Sie jede während der Übung geänderte fstab-Eintragung wieder her und überprüfen Sie sie.

Offizielle Referenzen