Das Einhängen einer Bind-Quelle funktioniert nicht und das Gerät hat nicht genügend Speicherplatz

Das Einhängen einer Bind-Quelle funktioniert nicht und das Gerät hat nicht genügend Speicherplatz

Ich glaube, ich habe mir ein Eigentor geschossen. Vor langer Zeit habe ich versucht, eine alte Linux-Maschine mit dem Befehl „mount bind“ auf einem NAS zu sichern:

mount --bind / /mnt/src tar -C /mnt/src -c . > /mnt/backup_to_nas/vollständiges-backup- date '+%d-%B-%Y'.tar.gz --exclude=tmp --exclude=mnt

Dann wurde mir klar, dass ich /mnt/src nie ausgehängt hatte

Meine Frage ist, ob dies doppelt so viel Speicherplatz auf meinem / beansprucht wie ich? Ich habe keinen Platz mehr und bin mir nicht sicher, ob ich mich im Kreis drehe, wenn ich versuche, Dateien zu löschen, um Speicherplatz freizugeben.

df -h zeigt:

[root@web-server mnt]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
devtmpfs                          1.9G     0  1.9G   0% /dev
tmpfs                             1.9G  4.0K  1.9G   1% /dev/shm
tmpfs                             1.9G  194M  1.7G  11% /run
tmpfs                             1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vda2                         7.6G  7.6G     0 100% /
/dev/vda1                         190M  171M  5.3M  98% /boot
/dev/vdb                          230G  152G   67G  70% /usr/local
tmpfs                             379M     0  379M   0% /run/user/0
tmpfs                             379M     0  379M   0% /run/user/2527
tmpfs                             379M     0  379M   0% /run/user/2543
10.50.1.104:/data                 9.1T  8.0T  610G  94% /mnt/backup
tmpfs                             379M     0  379M   0% /run/user/2539
10.75.0.199://volume1/ICCBackups   32T  4.2T   28T  14% /mnt/backup_to_nas
tmpfs                             379M     0  379M   0% /run/user/500

lsblk zeigt:

[root@web-server mnt]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
vda    253:0    0     8G  0 disk 
├─vda1 253:1    0   200M  0 part /boot
└─vda2 253:2    0   7.8G  0 part /mnt/src
vdb    253:16   0 232.8G  0 disk /usr/local

habe eine Speicherplatzprüfung im Root-Verzeichnis durchgeführt:

du -xhs * | sortieren -rh

134G    home
15G data
6.9G    mnt
186M    run
170M    boot
52M etc
848K    ARC-History.pdf
16K lost+found
8.0K    export
8.0K    backup
4.0K    media
4.0K    check_permissions.py
0   sys
0   proc
0   lib64
0   lib
0   dev
0   bin

Ich verstehe nicht, warum einige große Ordner wie /home größer sind als das, was df -h meldet, also habe ich ein mount | grep home ausgeführt und Folgendes erhalten:

[root@web-server mnt]# mount | grep home
/dev/vdb on /home type ext4 (rw,relatime,data=ordered)
/dev/vda2 on /home/weather/public_html/weather_rrd type ext4 (rw,relatime,data=ordered)
/dev/vda2 on /usr/local/home/weather/public_html/weather_rrd type ext4 (rw,relatime,data=ordered)
/dev/vdb on /home/workers/public_html/VM-SYSTEMS type ext4 (rw,relatime,data=ordered)
/dev/vdb on /usr/local/home/workers/public_html/VM-SYSTEMS type ext4 (rw,relatime,data=ordered)

Es sieht so aus, als ob ich mir etwas Luft verschaffen könnte, wenn ich herausfinden könnte, was das ist und wie ich es verlegen kann:

/dev/vda2 on /home/weather/public_html/weather_rrd type ext4 (rw,relatime,data=ordered)
/dev/vda2 on /usr/local/home/weather/public_html/weather_rrd type ext4 (rw,relatime,data=ordered)

Das alles nur, um zu sagen, ob mein mount --bind-Befehl von / in /mnt/src doppelt so viel Platz beansprucht hat? Habe ich dabei (wahrscheinlich) etwas nicht verstanden? Ich habe ein lsof /mnt/src ausgeführt und es scheint, dass alles es verwendet.

habe aber mit diesem Bericht begonnen und bin nicht sicher, ob es relevant ist:

[root@web-server mnt]# lsof /mnt/src
lsof: WARNING: can't stat() ext4 file system /var/www/html/net-status/bw-mon (deleted)
      Output information may be incomplete.
lsof: WARNING: can't stat() ext4 file system /usr/local/www/net-status/bw-mon (deleted)
      Output information may be incomplete.

Ich bin mir also nicht sicher, wo ich mit dem Löschen großer Dateien beginnen soll, da ich sie in /? finde (obwohl es so aussieht, als wäre /home woanders?). ls -lh zeigt sie nicht als symbolischen Link an.

[root@web-server /]# ls -lh
total 1.2M
-rw-------    1 root root 847K Jul 27  2020 ARC-History.pdf
drwxr-xr-x    3 root root 4.0K Sep 13 17:21 backup
lrwxrwxrwx    1 root root    7 May 11  2018 bin -> usr/bin
dr-xr-xr-x.   5 root root 3.0K Aug 16 18:06 boot
-rw-r--r--    1 root root 3.3K May 12  2019 check_permissions.py
-rw-------    1 root root    0 Sep 13 17:33 core.20448
-rw-------    1 root root    0 Sep 13 17:46 core.28055
drwxr-xr-x    7 root root 4.0K Sep 13 17:16 data
drwxr-xr-x   18 root root 3.1K Sep 12 18:08 dev
drwxr-xr-x. 148 root root  12K Aug 31 17:26 etc
drwxr-xr-x    3 root root 4.0K Apr  2  2015 export
drwxr-xr-x   22 root root 4.0K Aug 27 18:06 home
lrwxrwxrwx    1 root root    7 May 11  2018 lib -> usr/lib
lrwxrwxrwx    1 root root    9 May 11  2018 lib64 -> usr/lib64
drwx------.   2 root root  16K Mar 31  2015 lost+found
drwxr-xr-x.   2 root root 4.0K Apr 12  2018 media
drwxr-xr-x.   6 root root 4.0K Feb  9  2023 mnt
drwxr-xr-x.   7 root root 4.0K Aug 25 15:13 opt
dr-xr-xr-x  225 root root    0 Nov  8  2021 proc
dr-xr-x---.  26 root root  12K Aug 25 15:19 root
drwxr-xr-x   48 root root 1.5K Sep 13 17:01 run
lrwxrwxrwx    1 root root    8 May 11  2018 sbin -> usr/sbin
-rw-r--r--    1 root root    0 May 15  2019 searchresults.txt
drwxr-xr-x.   2 root root 4.0K Apr 12  2018 srv
dr-xr-xr-x   13 root root    0 Nov 29  2021 sys
drwxrwxrwt.  16 root root 244K Sep 13 17:49 tmp
drwxr-xr-x.  14 root root 4.0K May 11  2018 usr
drwxr-xr-x.  25 root root 4.0K Aug  9 20:21 var
drwxr-xr-x    2 root root 4.0K Aug  9  2015 zaphod-data

BEARBEITEN: Habe mir die fstab-Datei angesehen, die etwas Licht auf die Frage wirft, wo sich die Sachen befinden:

UUID=c9d6c99f-d7a5-4117-93ba-029cc34d8b61 /                       ext4    defaults        1 1
UUID=19fcad32-0fcb-423a-87e9-586d03d2e406 /boot                   ext4    defaults        1 2
#LABEL=/home    /home       ext4 defaults 1 2
#192.41.211.105:/export/images      /export/images          nfs     rsize=32768,wsize=32768,actimeo=0,bg,intr
LABEL=local-web-server  /usr/local  ext4    defaults    1 2
/usr/local/home     /home       none    bind        0 0
/usr/local/www      /var/www/html   none    bind        0 0
/usr/local/data     /data       none    bind        0 0
/tmp/rrdweather     /home/weather/public_html/weather_rrd   none    bind    0 0
/usr/local/data     /data       none    bind        0 0
/home/workers/Site/VM-SYSTEMS /home/workers/public_html/VM-SYSTEMS none bind 0 0
#/home/workers/public_html/WebCalendar-1.2.3 /home/workers/public_html/WebCalendar none bind 0 0
#/home/workers/public_html/WebCalendar-1.2.0 /home/workers/public_html/WebCalendar~ none bind 0 0
/home/workers/public_html/net-status /usr/local/www/net-status none bind 0 0
/tmp/bw-mon     /var/www/html/net-status/bw-mon     none    bind        0 0
/var/lib/smokeping/images /var/www/html/smokeping/images none   bind        0 0

#mounting for our cheezy backup of web-server
10.50.1.104:/data /mnt/backup nfs

Bearbeitung 2: Mir ist also aufgefallen, dass ich genauere Informationen erhalte, wenn ich den Sortierbefehl in /mnt/src ausführe …

[root@web-server src]# du -xhs * | sort -rh
4.8G    usr
707M    var
421M    opt
397M    backup
168M    root
150M    tmp
52M etc
848K    ARC-History.pdf
16K lost+found
12K mnt
8.0K    export
4.0K    zaphod-data
4.0K    sys
4.0K    srv
4.0K    run
4.0K    proc
4.0K    media
4.0K    home
4.0K    dev
4.0K    data
4.0K    check_permissions.py
4.0K    boot
0   searchresults.txt
0   sbin
0   lib64
0   lib
0   core.28055
0   core.20448
0   bin

Zeigt mir vielleicht Platz zum Löschen in usr (keine Ahnung, was, ich bin kein Linux-Guru), var hatte einige nette Sachen, die ich löschen konnte (alte Protokolle). Ich arbeite immer noch daran, aber der springende Punkt bei meiner Frage ist, ob ich /mnt/src wirklich aushängen soll? Oder ist es in Ordnung, es so laufen zu lassen, da jedes Mal, wenn ich versuche, den Befehl einzugeben, angezeigt wird, dass es beschäftigt ist?

Antwort1

Das Problem

/mnt/srcnimmt keinen Speicherplatz ein, aber Sie sollten es aushängen, um einige Tools, einschließlich Tools, die Backups durchführen, nicht zu verwirren. lsblkWählt beispielsweise die Anzeige des ersten passenden Mounts und zeigt /mnt/srcstattdessen /für an /dev/vda2, was nicht optimal ist.

Die meisten Linux-Systeme laufensystemdalso nehme ich an, dass dieses System läuftsystemd.

systemdremontiert / alsgeteiltmount anstelle des Standardwerts des Linux-Kernels vonPrivat. Die Kernel-Dokumentation zur Mount-Propagation finden Sie hier:Gemeinsam genutzte Teilbäume. Das bedeutet, dass wenn später zusätzliche Mounts hinzugefügt (oder entfernt und wieder hinzugefügt) werden, diese ebenfalls automatisch durch den Propagierungsmechanismus /gemountet werden , und/mnt/srcseit seinergeteilt(stattSklave) Wenn Sie versuchen, sie von zu trennen, /mnt/srcwerden sie auch von/, die entweder fehlschlagen (weil sie von Prozessen verwendet werden) oder bei Erfolg möglicherweise Schaden anrichten (sie verschwinden auch von ihrem ursprünglichen Einhängepunkt).

Was hätte getan werden sollen?

Führen Sie solche Bind-Mounts immer mit demPrivatPropagierungsoption. Wenn Sie dabei sind und es zu Sicherungszwecken verwenden, lassen Sie auch die Bind-Einbindung schreibgeschützt (neu) einbinden:

mount --bind --make-private -o ro / /mnt/src

Auf diese Weise wird keine weitere Interaktion mit anderenAnschlüssewird passieren und dies kann jederzeit mit einem einfachen Befehl umount /mnt/srcohne jegliche Nebeneffekte ausgehängt werden.

Was kann getan werden, um das aktuelle Problem zu beheben?

Um dies richtig zu machen, ohne die tatsächlichen ursprünglichen Mountpunkte zu beeinträchtigen, sollte man alle problematischen Mounts alsPrivatsodass sie ausgehängt werden können, ohne den ursprünglichen Einhängepunkt zu beeinträchtigen.

Ich mache hier ein Beispiel (alles alsWurzelBenutzer) und ahmt damit den Fall des OP nach, wo er Folgendes getan hat:

# mkdir -p /mnt/src
# mount --bind -o ro / /mnt/src

Und dann später (an einem Ort, der nicht schädlich sein kann):

# mkdir -p /root/intheway
# mount -t tmpfs tmpfs /root/intheway

was dann zu:

# umount /mnt/src
umount: /mnt/src: target is busy.
  • Identifizieren Sie problematische Halterungen mithilfe vonfindmnt:

    # findmnt --kernel --submounts --list -o +PROPAGATION /mnt/src
    TARGET                  SOURCE     FSTYPE  OPTIONS                        PROPAGATION
    /mnt/src                /dev/vda2  ext4    ro,relatime,errors=remount-ro  shared
    /mnt/src/root/intheway  tmpfs      tmpfs   rw,relatime,inode64            shared
    
  • Stellen Sie alle gefundenengeteiltmontiert alsPrivat, einschließlich /mnt/src:

    # mount --make-private /mnt/src/root/intheway
    # mount --make-private /mnt/src
    
  • demontieren (in umgekehrter Reihenfolge der Reihenfolge, in der sie montiert werden, wenn es mehrere Tiefen gibt), und abschließend mit/mnt/src

    # umount /mnt/src/root/intheway
    # umount /mnt/src
    

Die (gemeinsame) Halterung, die im Weg war, wurde dadurch nicht gestört:

# findmnt --kernel --list -o +PROPAGATION /root/intheway
TARGET         SOURCE FSTYPE OPTIONS             PROPAGATION
/root/intheway tmpfs  tmpfs  rw,relatime,inode64 shared

verwandte Informationen