$ cat /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=a168d1ac-4e13-4643-976d-6e47ea1732b1 /boot ext2 defaults 0 1
/dev/mapper/sda4_crypt / btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@ 0 2
/dev/mapper/sda4_crypt /tmp btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@tmp 0 2
/dev/mapper/sda4_crypt /run btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@run 0 2
/dev/mapper/sda4_crypt /var/crash btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@var-crash 0 2
/dev/mapper/sda4_crypt /var/tmp btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@var-tmp 0 2
/dev/mapper/sda4_crypt /var/log btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@var-log 0 2
/dev/mapper/sda4_crypt /var/spool btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@var-spool 0 2
/dev/mapper/sda5_crypt /home btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@home 0 3
/dev/mapper/750er /media/750er ext4 defaults 0 4
/dev/mapper/cswap none swap defaults 0 5
➜ ~ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/sda4_crypt 38G 12G 13M 100% /
none 4,0K 0 4,0K 0% /sys/fs/cgroup
udev 2,0G 4,0K 2,0G 1% /dev
tmpfs 396M 1,3M 394M 1% /run
none 5,0M 0 5,0M 0% /run/lock
none 2,0G 208K 2,0G 1% /run/shm
none 100M 36K 100M 1% /run/user
/dev/mapper/sda4_crypt 38G 12G 13M 100% /tmp
/dev/sda2 231M 44M 175M 21% /boot
/dev/mapper/sda4_crypt 38G 12G 13M 100% /var/crash
/dev/mapper/sda4_crypt 38G 12G 13M 100% /var/tmp
/dev/mapper/sda4_crypt 38G 12G 13M 100% /var/log
/dev/mapper/sda4_crypt 38G 12G 13M 100% /var/spool
/dev/mapper/sda5_crypt 3,7T 2,4T 1,2T 67% /home
/dev/mapper/750er 688G 276G 377G 43% /media/750er
/dev/mapper/2tb 1,8T 1,7T 141G 93% /media/2tb
➜ ~ sudo btrfs fi df /
Data, single: total=9.47GiB, used=9.46GiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, DUP: total=13.88GiB, used=1.13GiB
Metadata, single: total=8.00MiB, used=0.00
➜ ~
Es ist eine 40-GB-Partition mit einigen Schnappschüssen. Aber es ist komprimiert, so dass ich denke, dass die 9,46 GB / 40 GB genau sind. Aber mein Ubuntu schlägt fehl, weil es sagt, dass es keinen Speicherplatz hat. Ich hatte apt-Fehler, kann keine Programme installieren und mein MySQL-Server konnte deswegen nicht gestartet werden.
Und ich weiß, dass df
ich mich der Vollständigkeit halber nicht darauf verlassen kann .
Ich denke, Ubuntu verwendet, von df
dem bekannt ist, dass es intern falsch mit Btrfs meldet und aus diesem Grund fehlschlägt. Dies wäre für APT sinnvoll, wenn nach Speicherplatz gesucht wird. Es kann jedoch nicht auf die Festplatte geschrieben werden.
$ sudo time dd if=/dev/zero of=large bs=2G count=1
dd: error writing ‘large’: No space left on device
0+1 records in
0+0 records out
11747328 bytes (12 MB) copied, 1,29706 s, 9,1 MB/s
Command exited with non-zero status 1
0.00user 1.40system 0:01.44elapsed 97%CPU (0avgtext+0avgdata 2098028maxresident)k
160inputs+23104outputs (0major+383008minor)pagefaults 0swaps
disk-usage
btrfs
Redanimalwar
quelle
quelle
btrfs fi df
), Ihre Frage nicht?0 0
in Ihremfstab
für die btrfs Subvolumes haben. Siehe diese FAQAntworten:
Btrfs unterscheidet sich von herkömmlichen Dateisystemen. Es ist nicht nur eine Schicht, die Dateinamen in Offsets auf einem Blockgerät übersetzt, sondern eher eine Schicht, die ein traditionelles Dateisystem mit LVM und RAID kombiniert. Und wie LVM hat es das Konzept, Speicherplatz auf dem zugrunde liegenden Gerät zuzuweisen, ihn jedoch nicht für Dateien zu verwenden.
Ein traditionelles Dateisystem ist in Dateien und freien Speicherplatz unterteilt. Es ist einfach zu berechnen, wie viel Speicherplatz belegt oder frei ist:
Btrfs kombiniert LVM, RAID und ein Dateisystem. Das Laufwerk ist in Subvolumes unterteilt, die jeweils dynamisch dimensioniert und repliziert werden:
Das Diagramm zeigt die Partition, die in zwei Subvolumes und Metadaten unterteilt ist. Eines der Subvolumes ist dupliziert (RAID1), sodass von jeder Datei auf dem Gerät zwei Kopien vorhanden sind. Jetzt haben wir nicht nur das Konzept, wie viel Speicherplatz auf der Dateisystemebene frei ist, sondern auch, wie viel Speicherplatz auf der darunter liegenden Blockebene (Laufwerkspartition) frei ist. Der Speicherplatz wird auch von Metadaten belegt.
Wenn wir freien Speicherplatz in Btrfs berücksichtigen, müssen wir klären, um welchen freien Speicherplatz es sich handelt - um die Blockebene oder die Dateischicht? Auf der Blockebene werden Daten in 1-GB-Blöcken zugewiesen, sodass die Werte ziemlich grob sind und möglicherweise keinen Bezug zum Speicherplatz haben, den der Benutzer tatsächlich verwenden kann. Auf der Dateiebene ist es unmöglich, die Menge an freiem Speicherplatz anzugeben, da die Menge an Speicherplatz davon abhängt, wie er verwendet wird. Im obigen Beispiel nimmt eine auf dem replizierten Subvolume @ raid1 gespeicherte Datei doppelt so viel Speicherplatz ein wie dieselbe auf dem @ home- Subvolume gespeicherte Datei . Snapshots speichern nur Kopien von Dateien, die später geändert wurden. Es gibt keine 1-1-Zuordnung mehr zwischen einer Datei, wie sie der Benutzer sieht, und einer Datei, die auf dem Laufwerk gespeichert ist.
Sie können den freien Speicherplatz auf der Blockebene mit
btrfs filesystem show /
und den freien Speicherplatz auf der Subvolumebene mit überprüfenbtrfs filesystem df /
Für dieses gemountete Subvolume meldet df ein Laufwerk mit einer Gesamtgröße von 38 G, wobei 12 G verwendet werden und 13 M frei sind. 100% des verfügbaren Platzes wurde genutzt. Denken Sie daran, dass die Gesamtgröße 38G zwischen verschiedenen Subvolumes und Metadaten aufgeteilt ist - dies gilt nicht nur für dieses Subvolume.
Jede Zeile zeigt den gesamten Speicherplatz und den verwendeten Speicherplatz für einen anderen Datentyp und Replikationstyp. Bei den angezeigten Werten handelt es sich eher um Daten als um Rohbytes auf dem Laufwerk. Wenn Sie also RAID-1- oder RAID-10-Subvolumes verwenden, ist die Menge des verwendeten Rohspeichers doppelt so hoch wie die hier angezeigten Werte.
Die erste Spalte zeigt den Typ des gespeicherten Elements (Daten, System, Metadaten). Die zweite Spalte zeigt, ob eine einzelne Kopie jedes Elements gespeichert ist (einzeln) oder ob zwei Kopien jedes Elements gespeichert sind (DUP). Für vertrauliche Daten werden zwei Kopien verwendet, sodass eine Sicherung durchgeführt wird, wenn eine Kopie beschädigt ist. Bei DUP-Leitungen muss der verwendete Wert verdoppelt werden, um den auf dem tatsächlichen Laufwerk verwendeten Speicherplatz zu erhalten (da btrfs fs df gespeicherte Daten meldet, nicht den verwendeten Speicherplatz). Die dritte und vierte Spalte zeigen den gesamten und genutzten Platz. Es gibt keine freie Spalte, da die Menge an "freiem Speicherplatz" davon abhängt, wie er verwendet wird.
Das Besondere an diesem Laufwerk ist, dass Ihnen 9,47 GB Speicherplatz für normale Dateien zugewiesen sind, von denen Sie 9,46 GB verwendet haben. Aus diesem Grund erhalten Sie keinen Speicherplatz mehr für Gerätefehler . Sie haben 13,88 GB Speicherplatz für doppelte Metadaten zugewiesen, von denen Sie 1,13 GB verwendet haben. Da diese Metadaten DUP-dupliziert sind, bedeutet dies, dass 27,76 GB Speicherplatz auf dem tatsächlichen Laufwerk zugewiesen wurden, von dem Sie 2,26 GB verwendet haben. Daher werden 25,5 GB des Laufwerks nicht verwendet, stehen aber gleichzeitig nicht für Dateien zur Verfügung, in denen gespeichert werden soll. Dies ist das Problem "Btrfs riesige Metadaten zugewiesen" . Führen Sie aus, um dies zu korrigieren
btrfs balance start -m /
. Der Parameter -m weist btrfs an, nur Metadaten neu auszugleichen.Ein ähnliches Problem besteht darin, dass nicht mehr genügend Metadaten vorhanden sind. Wenn die Ausgabe gezeigt hätte, dass die Metadaten tatsächlich voll sind ( verwendeter Wert nahe am Gesamtwert ), besteht die Lösung darin, mit dem Befehl zu versuchen, fast leere (<5% verwendete) Datenblöcke freizugeben
btrfs balance start -dusage=5 /
. Diese freien Blöcke könnten dann zum Speichern von Metadaten wiederverwendet werden.Weitere Informationen finden Sie in den Btrfs-FAQs:
Ich erhalte die Fehlermeldung "Kein Speicherplatz mehr auf dem Gerät", aber df sagt, ich habe viel Speicherplatz
Btrfs behauptet, ich hätte keinen Platz mehr, aber es sieht so aus, als hätte ich noch viel übrig .
quelle
btrfs fi df
Ausgabe - er hatte 49 GB eines 75 GB-Laufwerks für Metadaten zugewiesen, wobei 29 GB davon nicht verwendet wurden.Kurze Antwort: Btrfs-Partitionsmetadaten werden von Standard-Festplatten-Dienstprogrammen wie df als "verwendet" angezeigt.
Überprüfen Sie das Problemvolumen. beispielsweise: /
Höchstwahrscheinlich füllen Schnappschüsse das Volumen. Löschen Sie den nicht benötigten Schnappschuss. Bewahren Sie eine vom letzten Datum auf. Sie sind sicher, dass das System einwandfrei funktioniert hat.
Wobei der Pfad von der vorherigen Befehls-Subvolume-Liste stammt, in der "Snapshot" steht.
Starten Sie neu und Sie sind fertig
Grund für das Problem könnte sein, dass Ihre Distribution oder Ihr Paketmanager jedes Mal, wenn Sie das System aktualisieren, Snaphots erstellt.
NB: Der Befehl balance schlägt fehl, wenn die Festplatte voll ist, da kein freier Speicherplatz vorhanden ist.
quelle
In meinem Fall würde die Festplattennutzung nicht sinken, selbst wenn ich Dateien und Snapshots gelöscht hätte.
btrfs balance (Daten und Metadaten) funktionierte nicht mit dem Fehler "Kein Speicherplatz mehr auf dem Gerät"
Das RAID1 zeigte auf beiden Festplatten die volle Auslastung, obwohl die tatsächliche Datennutzung weniger als ein Drittel davon betrug.
Lösung: Leere Brocken verwerfen , benötigt keinen zusätzlichen Platz:
Quelle: https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-balance#ENOSPC
Alternative: Meine Lösung bestand darin, die Festplatten zu verkleinern. Siehe: /unix/239765/how-to-fix-btrfs-superblock-error-after-resize-shrink-btrfs-couldnt-get-super
(Befehle brauchen Zeit, überprüfen Sie das Syslog, um zu sehen, wie Blöcke verschoben werden.)
danach Größe ändern:
Danach funktionierte btrfs balance (Metadaten) wieder:
Dann btrfs Gleichgewicht der Daten (Verschieben von Datenblöcken mit einer Auslastung von weniger als 33%):
quelle
Das Guthaben geht an @ignis und @bain. Nur um hier ohne den ganzen Vortrag eine einfache, direkt auf den Punkt bezogene Referenzantwort zu haben und um zu teilen, was ich tatsächlich getan habe, um das System wieder zum Laufen zu bringen.
Ist die magische Linie, um solche Probleme zu lösen.
Ich hatte einige Probleme, mit denen ich Sie nicht langweilen möchte, und ich weiß nicht, dass es notwendig war, dies von einer Live-CD aus auszuführen, aber was ich am Ende getan habe, nachdem das System durcheinander gebracht wurde und nicht gebootet wurde, war das Ausführen von btrfsck Die Geräte (entsperrte Krypto-Mapper) haben tatsächlich Fehler gefunden und dann das Root-BTRFS-Dateisystem ohne Optionen bereitgestellt
/mnt
, im Gegensatz zu meinem installierten System, auf/
dem nur das@
bereitgestellte Subvolume installiert ist . Also hatte ich auch alle Schnappschüsse und anderen Subvolumes drin. Ich weiß nicht, dass dies einen Unterschied macht.Ich habe die Metadaten von erhalten
zu
Und eine Erfrischung:
Also ich denke jetzt ist alles in Ordnung.
quelle