Ist es möglich, die komprimierten und unkomprimierten Größen einer Datei auf einem btrfs-Dateisystem?
Ist es möglich, zu bestimmen, was die komprimierte Größe (ich nehme an, das ist das, was aufgelistet ist ls -l
) und unkomprimierte Größe der Dateien auf eine btrfs Dateisystem mit transparente Kompression aktiviert?
ls -l
zeigen Sie die unkomprimierte Größe, nicht die komprimierte Größe.- Danke, gut zu wissen. Dann, wie kann ich die komprimierte Größe?
- Keine Ahnung. Meine Vermutung müsste man die Blöcke (vielleicht über filefrag), aber es ist nicht wirklich mein Gebiet. Diese Frage ist wohl eher angebracht, die auf super-user als stack-überlauf, aber TBH, ich würde versuchen, eine btrfs-forum statt (wie IRC-Raum oder auf der mailing-Liste).
Du musst angemeldet sein, um einen Kommentar abzugeben.
gibt es Drittanbieter-Tools, die das können.
https://github.com/kilobyte/compsize
Verwendung:
Ich bin nicht in der Lage zu Antworten auf eine Datei vom Datei-basis, und @catlover2 gab die Antwort für ein Dateisystem. Aber man sollte unterscheiden zwischen der block-Größe auf der Festplatte und die Größe in der (virtuellen) Dateisystem
ls
unddu
können nicht über das hinausgehen, Dateisystem, so geben Sie keine Informationen an, wie viele Datenträger-Blöcke verwendet, und @jiliagre--apparent-size
ist hier nutzlos.Zur besseren Veranschaulichung dieser Frage, ich habe einen test mit einem einzigen 23G-Datei btrfs-Dateisystem; zuerst entpackt, dann mit lzo komprimiert. Die Beispiel-Datei ist das abbild einer virtuellen Maschine und als nur eine Kompression Niveau von 0.5. Es zeigt sich, dass nur
df
, undbtrfs filesystem df
zeigen kann, ist die Kompression.Die Frage von @gandalf3 ist noch immer unbeantwortet, und vielleicht werden wir warten müssen, für die Entwicklung von btrfs (oder zu helfen, Sie zu entwickeln!) um eine ordnungsgemäße zugrunde liegenden Datenträger-block
du
für eine Besondere Datei. Es wäre sehr nützlich, finde ich sehr frustrierend, wenn ich mount für eine btrfs-fs mit Kompression (ohne Kraft) nicht wissen, ob meine Dateien komprimiert sind oder nicht und auf welcher Ebene.Des on-disk-Größe einer Datei, unabhängig von der Datei-system-Typ, gegeben ist1 von der
du
Befehl, zB:Des on-disk-Größe ist gleich der Größe der Datei und die Größe der zugehörigen Metadaten, gerundet auf die Blockgröße des Dateisystems. Nicht komprimierte Dateien haben in der Regel ein etwas größeres auf der Festplatte Größe als die tatsächliche (Byte count) Größe.
Wie gesagt, die unkomprimierte Größe wird durch
ls -l
. Es kann auch berichtet werdendu
mit der--apparent-size option
;Beachten Sie, dass
-B1
und--apparent-size
sind GNU-spezifischedu
extensions.1 Es scheint
btrfs
folgt nicht dieser Regel. Wenn das wirklich/noch stimmt, mein Verständnis ist, die berücksichtigt werden sollten einen Fehler oder zumindest eine POSIX-non-conformance.st_blocks
. Was "number of disk blocks" bedeutet, ist klar, und btrfs nicht entsprechen dieser definition.Ich war versucht, diese Frage zu beantworten, auch, und hier ist, was ich gefunden habe:
du -s
unddf
produzieren verschiedene zahlen. Also ich habe einige Tests:Habe ich ein test-Verzeichnis in /home mit einer Größe von über 3 TB. Es ist eine teilweise Kopie des gesamten /home-Verzeichnis mit einer typischen Mischung von Dokumenten, text-Dateien, Bilder und Programme
Ich komprimiert dieses Verzeichnis mit .tar.gz das führte in der Datei der Größe
# du -s ./test.tar.gz
1672083116 ./test.tar.gz
# du -s /home
11017624664 /home
# du --apparent-size -s /home
11010709168 /home
# df /home
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/md2 31230406656 9128594488 22095200200 30% /home
Was bedeutet, dass wir
((11017624664/(1024**2))/(9128594488/(1024**2))-1)*100 = 20%
Verdichtung# du -s /home
9348284812 /home
# du --apparent-size -s /home
9340957158 /home
# df /home
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/md2 31230406656 7455549036 23764949364 24% /home
Woraus sich ein Komprimierungsverhältnis von 25%. Auch aus diesen Informationen habe ich festgestellt, dass die test.tar.gz Datei mit dem real-Größe 1592 G belegt auf der Festplatte 1595 G. Auch habe ich festgestellt, dass die Verwendung
--apparent-size
Flagge produziert unbedeutenden Unterschied, wahrscheinlich aufgrund der Blockgröße Rundung.Side note, meine fstab Zeile für das mounten der partition ist:
UUID=be6...07fe /home btrfs defaults,compress=zlib 0 2
Zusammenfassung:
Prüfen, Kompression Verhältnis auf den ganzen partition-verwenden Sie diese beiden Befehle:
du -s /home
df /home
Dann teilen Sie die Ausgänge. Ich denke, dass meine 25% Kompression Verhältnis ist ein typisches Ergebnis zu erwarten von einem zlib Kompressor.
Können Sie erstellen Sie ein Btrfs-Dateisystem in einer Datei, mounten, kopieren Sie die Dateien und führen Sie df:
Beispiel einer einzelnen Datei komprimiert aus 17MiB zu 5MiB:
In Ubuntu-18
Laufen
btrfs filesystem df /mountpoint
.Beispiel-Ausgabe:
Den Schlüssel Zeile beginnt mit
Data:
;used=
ist die komprimierte Größe undtotal=
ist die Gesamtgröße, als ob auf ein Unkomprimiertes Dateisystem. Ich erstellte eine test-Dateisystem, montiert es mit dercompress_force=zlib
option, und kopiert 1GB von Nullen in eine Datei auf dem Dateisystem, an diesem Punkt derData:
Linie warData: total=1.01GB, used=32.53MB
(Nullen sind ganz komprimierbar!). Dann habe ich wieder montiert das Dateisystem mit Komprimierung deaktiviert, kopiert ein anderes GB Nullen zu, und an diesem Punkt derData:
Zeile LesenData: total=2.01GB, used=1.03GB
.Als nemequ oben erwähnt,
ls -l
im Gegenteil, zeigt die unkomprimierte Größe.total=
nicht quantifizieren, Daten-Nutzung. Btrfs behält sich große Ansammlungen von leeren Raum im Voraus: dies verbessert die Daten-Lokalität und reduziert die Fragmentierung.total
quantifiziert die Summe der aktuellen chunks, das heißt, dassused
+ die Summe der leere Raum in den Blöcken. Wenn Sie schreiben und es ist genug freier Speicherplatz im chunkused
verpasst, abertotal
nicht. Wennused
Ansätzetotal
, Btrfs legt einen neuen Platzhalter über einige Raum außerhalbtotal
, fügt es zutotal
, und nicht touchused
.