1

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

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

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

1 ответ1

1

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

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


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

   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), и он может делать все перемещение / сжатие / изменение размера / форматирование, если хотите, или вы можете только создавать разделы с ним, и форматировать их позже Вы сами используете "весь" раздел и не беспокоитесь о точных размерах.


Возможно, вы захотите прочитать страницу 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' кибибайт: 2 ^ 10 = 1024. "K" является особенным: префикс SI - это "k", а префикс ISO/IEC 80000-13 - "Ki", но традиция и POSIX используют "k" для обозначения "KiB".

МБ мегабайт: 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .