Недопонимание единиц в fdisk / gdisk / parted

1492
Matt

Недавно я столкнулся с проблемой разделения и не мог выяснить, какая утилита использует MB или MiB и почему они не могут быть согласованными во всех трех утилитах.

Например, в fdisk, когда вы распечатываете таблицу разделов, размеры указываются в M или G (я предполагаю, что это мегабайты и гигабайты ??), а в gdisk они распечатываются в MiB или GiB (которые являются мебибайтами и гибибайтами). ) ... И в resize2fs он фактически указывает на страницах руководства, что он находится в мегабайтах (что составляет мегабайт). И расстались, ну я еще даже не посмотрел на это ...

Теперь, имея в виду, что 100 МБ полностью отличается от 100 МБ и что эта информация крайне важна для того, чтобы не потерять все ваши данные, каково настоящее практическое правило?

1
Я знаю, что есть [Политика Ubuntu Units] (https://wiki.ubuntu.com/UnitsPolicy). Kamil Maciorowski 7 лет назад 0

1 ответ на вопрос

1
Xen2050

Многие программы следуют одинаковым соглашениям о единицах измерения размера или «размере блока». Но это не универсальное правило, каждая программа, как правило, может «делать то, что она хочет», поэтому обязательно прочитайте man или информационную страницу каждого инструмента, чтобы быть уверенным.

Для разметки я бы определенно выбрал gparted, он должен избегать путаницы, показывая вам, какие юниты он использует довольно четко.


Мой man resize2fsфактически не говорит, что использует только MB (один миллион байт), а вот так:

 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 показывает размеры в секторах, в зависимости от того, что проверяемое устройство говорит о секторе. Вот пример выходных данных для небольшого устройства, размер которого составляет 3997 МБ, 3997171712 байт, что использует предпочтительный «больший» размер 1 МБ = 1 000 000 байт:

$ 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 

Вы можете заметить, что он говорит, что единственный раздел - это 3899392 блока, но вычитание конца из начала дает вдвое больше ... это странно и неправильно, но man fdiskговорит: «fdisk - это глючная программа, которая делает нечеткие вещи - обычно это происходит чтобы получить разумные результаты. Его единственным преимуществом является то, что он имеет некоторую поддержку меток дисков BSD и других таблиц разделов, не относящихся к DOS. Избегайте этого, если можете. "
Он рекомендует cfdisk, что более точно показывает (в блоках по 512 байт):

$ 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 показывает MB = 1 000 000 байт по умолчанию, но это можно изменить с помощью этого:

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 

но единицы могут быть изменены с помощью команды единиц:

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). 

Тем не менее, gpartedпоказывает размеры в (мой предпочтительный) M или MiB (степень 1024), и он может делать все перемещение / сжатие / изменение размера / форматирования тоже, если хотите, или вы можете только создать разделы с ним, и отформатировать их позже самостоятельно используя «весь» раздел и не беспокойтесь о точных размерах.

enter image description here


Возможно, вы захотите прочитать страницу coreutils.info о размере блока:

2.3 Размер блока

Некоторые программы GNU (по крайней мере, 'df', 'du' и 'ls') отображают размеры в «блоках». Вы можете настроить размер блока и способ отображения, чтобы сделать размеры легче для чтения. Размер блока, используемого для отображения, не зависит от размера блока файловой системы. Дробные числа блоков округляются до ближайшего целого числа.

...

За целочисленным размером блока может следовать суффикс для указания кратного этого размера. Буква чистого размера, или буква, за которой следует «iB», указывает кратность, используя степени 1024. Буква размера, за которой следует буква «B», вместо этого указывает степень 1000. Например, «1M» и «1MiB» эквивалентны «1048576», тогда как «1MB» эквивалентны «1000000».

Простой суффикс без предшествующего целого числа действует так, как если бы к нему был добавлен «1», за исключением того, что он приводит к добавлению индикации размера к выводу. Например, '--block-size = "kB" "отображает 3000 как" 3kB ".

Следующие суффиксы определены. Большие размеры, такие как «1Y», могут быть отклонены вашим компьютером из-за ограничений его арифметики.

килобайт в килобайтах: 10 ^ 3 = 1000.

'k' 'K' 'KiB' kibibyte: 2 ^ 10 = 1024. 'K' - особенный: префикс SI - 'k', а префикс ISO / IEC 80000-13 - 'Ki', но традиция и использование POSIX ' k 'означает "КиБ".

МБ мегабайт: 10 ^ 6 = 1 000 000.

'M' 'MiB' мебибайт: 2 ^ 20 = 1 048 576.

ГБ гигабайт: 10 ^ 9 = 1 000 000 000.

«G» «GiB» гибибайт: 2 ^ 30 = 1 073 741 824.

Терабайт «ТБ»: 10 ^ 12 = 1 000 000 000 000.

Тибибит 'T' 'TiB': 2 ^ 40 = 1 099 511 627 776.

Петабайт PB: 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' exbibyte: 2 ^ 60 = 1 152 921 504 606 846 976.

Зетабайт ZB: 10 ^ 21 = 1 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.

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

Значения по умолчанию для размера блока могут быть переопределены явным параметром --block-size = SIZE. Опция '-k' эквивалентна '--block-size = 1K', которая используется по умолчанию, если не установлена ​​переменная окружения 'POSIXLY_CORRECT'. Параметр «-h» или «--human-readable» эквивалентен «--block-size = human-readable». Параметр --si эквивалентен параметру --block-size = si.

Итак, читая человека resize2fs, он говорит о K, M, G ... и т.д. и называет это мегабайтами и гигабайтами ?? Разве это не странно? Разве это не должны быть mebibytes и gibibytes? Или я все еще что-то упускаю? Matt 7 лет назад 0
Да, просто пропущен странный аргумент именования между мегабайтом, означающим 1 000 000 байтов (который производители предпочитают использовать, так как он «больше», и префикс «мега»), или 1 048 576 байтов (которые компьютеры обычно используют десятилетиями). Я склонен согласиться с автором справочной страницы resize2fs (Theodore Ts'o? Вероятно, нет) и думаю, что «байт» в мегабайтах дает ему степень 2 более миллиона байтов, а «ib» в кибибайтах, mebibyte, gibibyte довольно глупо. Напоминает мне: «Linux на самом деле не называется Linux, вы должны называть его GNU-Linux, потому что ... причины?» аргумент Xen2050 7 лет назад 0
Автор утверждает, что «некоторые политкорректные люди настаивают на том, что это глупо звучит ...» Но МЫ В ЛИНУКСЕ, а не в мире окон, поэтому у нас не должно быть этих двусмысленностей. Особенно при использовании мощного низкоуровневого инструмента разбиения диска! Matt 6 лет назад 0
Ну, в любом случае, что за имя, диск с любым другим именем все равно сломается ... Xen2050 6 лет назад 0