Missverständnis der Einheiten in fdisk / gdisk / parted

1563
Matt

Ich habe kürzlich ein Partionierungsproblem durchlaufen und konnte nicht herausfinden, welches Dienstprogramm MB oder MiB verwendet und warum sie nicht in allen drei Dienstprogrammen konsistent sein konnten.

Wenn Sie beispielsweise in fdisk die Partitionstabelle ausdrucken, werden die Größen in M ​​oder G angegeben (wobei ich annehme, dass es sich um Megabytes und Gigabytes handelt?). In gdisk werden sie in MiB oder GiB (die Mebibytes und Gibibytes sind) ausgedruckt ) ... Und in resize2fs gibt es tatsächlich in den Manpages an, dass es in MB (was Megabytes ist) ist. Und geschieden, nun, ich habe es noch nicht einmal angeschaut ...

Denken Sie daran, dass 100 MB völlig anders als 100 MiB sind und dass diese Informationen entscheidend sind, um nicht alle Ihre Daten zu verlieren. Was ist die eigentliche Faustregel?

1
Ich weiß, dass es [Ubuntu Units Policy] (https://wiki.ubuntu.com/UnitsPolicy) gibt. Kamil Maciorowski vor 7 Jahren 0

1 Antwort auf die Frage

1
Xen2050

Viele Programme folgen den gleichen Konventionen bezüglich Größeneinheiten oder "Blockgrößen". Dies ist jedoch keine universelle Regel. Jedes Programm kann im Allgemeinen "tun, was es will". Lesen Sie daher unbedingt die Man- oder Info-Seite jedes Tools, um sicherzugehen.

Bei der Partitionierung würde ich definitiv auf gparted zurückgreifen. Es sollte jegliche Verwirrung vermeiden und Ihnen zeigen, welche Einheiten es verwendet.


Meiner man resize2fsMeinung nach heißt das nicht, dass nur MB (eine Million Bytes) verwendet wird, sondern eher Folgendes:

 The size parameter specifies the requested new size of the filesystem. If no units are specified, the units of the size parameter shall be the filesystem blocksize of the filesystem. Optionally, the size parameter may be suffixed by one of the following the units designators: 's', 'K', 'M', or 'G', for 512 byte sectors, kilobytes, megabytes, or giga‐ bytes, respectively. The size of the filesystem may never be larger than the size of the partition. If size parameter is not specified, it will default to the size of the partition.  Note: when kilobytes is used above, I mean real, power-of-2 kilobytes, (i.e., 1024 bytes), which some politically correct folks insist should be the stupid-sounding ``kibibytes''. The same holds true for megabytes, also sometimes known as ``mebibytes'', or gigabytes, as the amazingly silly ``gibibytes''. Makes you want to gibber, doesn't it? 

fdisk zeigt die Größen in Sektoren an, je nachdem, was das untersuchte Gerät für einen Sektor hält. Hier ein Beispiel für ein kleines Gerät. Die Größe wird mit 3997 MB, 3997171712 Bytes angegeben. Dabei werden die vom Hersteller bevorzugten "größeren" 1 MB = 1.000.000 Bytes verwendet:

$ sudo fdisk -l /dev/sdb  Disk /dev/sdb: 3997 MB, 3997171712 bytes 17 heads, 16 sectors/track, 28702 cylinders, total 7806976 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000  Device Boot Start End Blocks Id System /dev/sdb1 8192 7806975 3899392 b W95 FAT32 

Sie werden vielleicht feststellen, dass die einzige Partition 3899392 Blöcke ist, aber das Ende vom Ende abzunehmen, ergibt das doppelte ... Das ist merkwürdig und falsch, man fdisksagt aber "fdisk ist ein fehlerhaftes Programm, das unscharfe Dinge tut - normalerweise passiert es um vernünftige Ergebnisse zu erzielen. Der einzige Vorteil ist, dass BSD-Plattenbeschriftungen und andere Nicht-DOS-Partitionstabellen unterstützt werden. Vermeiden Sie es, wenn Sie können. "
Es empfiehlt sich jedoch cfdisk, das genauer darzustellen (in 512-Byte-Blöcken):

$ sudo cfdisk -P s /dev/sdb Partition Table for /dev/sdb  First Last # Type Sector Sector Offset Length Filesystem Type (ID) Flag -- ------- ----------- ----------- ------ ----------- -------------------- ---- Pri/Log 0 8191* 0# 8192*Free Space None 1 Primary 8192* 7806975* 0 7798784 W95 FAT32 (0B) None 

parted zeigt standardmäßig MB = 1.000.000 Byte, dies kann jedoch folgendermaßen geändert werden:

Model: Multi Flash Reader (scsi) Disk /dev/sdb: 3997MB Sector size (logical/physical): 512B/512B Partition Table: msdos  Number Start End Size Type File system Flags 1 4194kB 3997MB 3993MB primary ext3 

Die Einheiten können jedoch mit dem Einheitenbefehl geändert werden:

unit unit Set unit as the unit to use when displaying locations and sizes, and for interpreting those given by the user when not suffixed with an explicit unit. unit can be one of "s" (sectors), "B" (bytes), "kB", "MB", "GB", "TB", "%" (percentage of device size), "cyl" (cylinders), "chs" (cylinders, heads, sectors), or "compact" (megabytes for input, and a human-friendly form for output). 

Allerdings gpartedzeigt Größen in (meine bevorzugte) M oder MiB (Potenzen von 1024), und es können alle Bewegungs tun / Schrumpfen / Ändern der Größe / Formatierung zu, wenn Sie möchten, oder Sie können nur Partitionen erstellen mit ihm, und formatieren Sie sie sich später Verwenden Sie die "gesamte" Partition und machen Sie sich keine Gedanken über die genauen Größen.


Vielleicht möchten Sie die coreutils.info-Seite zur Blockgröße lesen:

2.3 Blockgröße

Einige GNU-Programme (mindestens 'df', 'du' und 'ls') zeigen Größen in "Blöcken" an. Sie können die Blockgröße und die Anzeigemethode anpassen, um die Größen leichter lesbar zu machen. Die für die Anzeige verwendete Blockgröße ist unabhängig von der Blockgröße des Dateisystems. Fraktionsblockzählungen werden auf die nächste ganze Zahl aufgerundet.

...

Auf eine ganzzahlige Blockgröße kann ein Suffix folgen, um ein Vielfaches dieser Größe anzugeben. Ein bloßer Buchstaben oder einer, auf den "iB" folgt, gibt ein Vielfaches von 1024 an. Ein Größenbuchstabe, gefolgt von "B", gibt stattdessen Potenzen von 1000 an. Beispielsweise entsprechen '1M' und '1MiB' '1048576', während '1MB' '1000000' entspricht.

Ein einfaches Suffix ohne vorangestellte ganze Zahl verhält sich so, als ob '1' vorangestellt würde, mit der Ausnahme, dass eine Größenangabe an die Ausgabe angehängt wird. Beispielsweise zeigt '--block-size = "kB" "3000 als' 3kB 'an.

Die folgenden Suffixe werden definiert. Große Größen wie '1J' können von Ihrem Computer aufgrund von Einschränkungen der Rechenleistung abgelehnt werden.

"kB" Kilobyte: 10 ^ 3 = 1000.

'k' 'K' 'KiB' Kibibyte: 2 ^ 10 = 1024. 'K' ist speziell: Das SI-Präfix ist 'k' und das Präfix von ISO / IEC 80000-13 ist 'Ki', aber Tradition und POSIX verwenden ' k 'bedeutet "KiB".

'MB' Megabyte: 10 ^ 6 = 1.000.000.

"M" "MiB" -Mebibyte: 2 ^ 20 = 1.048.576.

'GB' Gigabyte: 10 ^ 9 = 1.000.000.000.

'G' 'GiB' Gibibyte: 2 ^ 30 = 1.073.741.824.

TB-Terabyte: 10 ^ 12 = 1.000.000.000.000.

"T" "TiB" -Tebibyte: 2 ^ 40 = 1.099.511.627.776.

'PB' Petabyte: 10 ^ 15 = 1.000.000.000.000.000.

"P" "PiB" -Pebibyte: 2 ^ 50 = 1.125.899.906.842.624.

'EB' Exabyte: 10 ^ 18 = 1.000.000.000.000.000.000.

'E' 'EiB' Beispiel: 2 ^ 60 = 1.152.921.504.606.846.976.

'ZB' Zettabyte: 10 ^ 21 = 1.000.000.000.000.000.000.000.000

'Z' 'ZiB' 2 ^ 70 = 1,180,591,620,717,411,303,424.

YB-Yottabyte: 10 ^ 24 = 1.000.000.000.000.000.000.000.000.000.

'Y' 'YiB' 2 ^ 80 = 1,208,925,819,614,629,174,706,176.

Die Standardwerte für Blockgrößen können durch eine explizite '--block-size = SIZE'-Option überschrieben werden. Die Option "-k" entspricht "--block-size = 1K". Dies ist die Standardeinstellung, es sei denn, die Umgebungsvariable 'POSIXLY_CORRECT' ist gesetzt. Die Option '-h' oder '--human-readable' entspricht "--block-size = menschenlesbar". Die Option "--si" entspricht "--block-size = si".

Ok, beim Lesen des resize2fs-Mannes wird über K, M, G usw. gesprochen. und bezieht sich darauf als Megabytes und Gigabytes? Ist das nicht seltsam? Sollte es nicht Mebibytes und Gibibytes sein? Oder fehlt mir noch etwas? Matt vor 7 Jahren 0
Ja, das merkwürdige Namensargument zwischen Megabyte, das 1.000.000 Byes bedeutet (die Hersteller verwenden, da es "größer" ist, und das "Mega-Präfix" impliziert), fehlt, oder 1.048.576 Bytes (die Computer normalerweise seit Jahrzehnten verwenden). Ich stimme dem Autor der resize2fs-Manpage (Theodore Ts'o? Wahrscheinlich nicht zu) zu und denke, das "Byte" in Megabyte gibt der Power-of-2 mehr als eine Million Bytes, und das "ib" im Kibibyte. Mebibyte, Gibibyte ist ziemlich dumm. Erinnert mich an "Linux wird nicht wirklich Linux genannt, Sie sollten es GNU-Linux nennen, weil ... Gründe?" Streit Xen2050 vor 7 Jahren 0
Der Autor sagt, "einige politisch korrekte Leute bestehen darauf, dass das dumm klingt ..." Aber WIR SIND IN LINUX, nicht in der Windows-Welt, also sollten wir diese Mehrdeutigkeiten nicht haben. Besonders wenn Sie ein leistungsfähiges Low-Level-Festplattenpartitionierungs-Tool verwenden! Matt vor 6 Jahren 0
Nun, was ist in einem Namen sowieso, eine Platte mit einem anderen Namen würde immer noch so stark abstürzen ... Xen2050 vor 6 Jahren 0