Desentendimento de unidades em fdisk / gdisk / parted


1

Eu estava enfrentando um problema de particionamento recentemente e não consegui descobrir qual utilitário estava usando MB ou MiB e por que eles não eram consistentes nos três utilitários.

Por exemplo, no fdisk, quando você imprime a tabela de partição, os tamanhos estão em M ou G (que eu presumo serem megabytes e gigabytes ??) E no gdisk, eles são impressos no MiB ou GiB (que são mebibytes e gibibytes ) ... E no resize2fs ele realmente especifica nas páginas de manual que ele está em MB (que é megabytes). E se separaram, bem, eu ainda nem olhei para isso ...

Agora, tendo em mente que 100 MB é totalmente diferente de 100 MiB e que essas informações são cruciais para não perder todos os seus dados, qual é a regra geral?


Respostas:


1

Muitos programas seguem as mesmas convenções sobre unidades de tamanho ou "tamanho do bloco". Mas não é uma regra universal, pois cada programa geralmente pode "fazer o que quer", então leia definitivamente o manual ou página de informações de cada ferramenta para ter certeza.

Para particionar, eu definitivamente usaria o gparted, ele deve evitar qualquer confusão, mostrando quais unidades está usando com bastante clareza.


man resize2fsNa verdade, o meu não diz que usa apenas MB (um milhão de bytes), mas sim:

   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?

O fdisk mostra tamanhos em setores, de acordo com o que o dispositivo examinado diz que é um setor. Aqui está um exemplo de saída para um dispositivo pequeno: o tamanho é relatado como 3997 MB, 3997171712 bytes, que está usando o 1MB "maior" preferido do fabricante = 1.000.000 bytes:

$ 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

Você pode perceber que está me dizendo que a única partição são 3899392 blocos, mas subtrair o final do início gera duas vezes mais ... isso é estranho e incorreto, mas man fdiskdiz "fdisk é um programa de buggy que faz coisas confusas - geralmente acontece para produzir resultados razoáveis. Sua única vantagem é que ele oferece suporte a rótulos de disco BSD e outras tabelas de partição que não sejam do DOS. Evite-o se puder. "
Ele recomenda cfdisk, que mostra com mais precisão (em blocos de 512 bytes):

$ 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 mostra MB = 1.000.000 bytes por padrão, mas isso pode ser alterado com isso:

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

mas as unidades podem ser alteradas com o comando units:

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

No entanto, gpartedmostra os tamanhos em (meu preferido) M ou MiB (potências de 1024), e ele também pode fazer todas as alterações / reduções / redimensionamentos / formatações, se quiser, ou você só pode criar partições com ele e formatá-las posteriormente usando a partição "inteira" e não se preocupe com os tamanhos exatos.

insira a descrição da imagem aqui


Você pode querer ler a página coreutils.info em Tamanho do bloco:

2.3 Tamanho do bloco

Alguns programas GNU (pelo menos 'df', 'du' e 'ls') exibem tamanhos em "blocos". Você pode ajustar o tamanho do bloco e o método de exibição para facilitar a leitura dos tamanhos. O tamanho do bloco usado para exibição é independente de qualquer tamanho de bloco do sistema de arquivos. As contagens de blocos fracionários são arredondadas para o número inteiro mais próximo.

...

Um tamanho de bloco inteiro pode ser seguido por um sufixo para especificar um múltiplo desse tamanho. Uma letra de tamanho simples, ou uma seguida por 'iB', especifica um múltiplo usando potências de 1024. Uma letra de tamanho seguida de 'B' especifica potências de 1000. Por exemplo, '1M' e '1MiB' são equivalentes a '1048576', enquanto '1MB' é equivalente a '1000000'.

Um sufixo simples sem um número inteiro anterior atua como se '1' tivesse sido acrescentado, exceto que ele faz com que uma indicação de tamanho seja anexada à saída. Por exemplo, '--block-size = "kB"' exibe 3000 como '3kB'.

Os seguintes sufixos estão definidos. Tamanhos grandes como '1Y' podem ser rejeitados pelo seu computador devido a limitações de sua aritmética.

Kilobyte 'kB': 10 ^ 3 = 1000.

kibibyte 'k' 'K' 'KiB': 2 ^ 10 = 1024. 'K' é especial: o prefixo SI é 'k' e o prefixo ISO / IEC 80000-13 é 'Ki', mas a tradição e o POSIX usam ' k 'significa' KiB '.

Megabyte de 'MB': 10 ^ 6 = 1.000.000.

Mebibyte 'M' 'MiB': 2 ^ 20 = 1.048.576.

Gigabyte de 'GB': 10 ^ 9 = 1.000.000.000.

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

Terabyte de 'TB': 10 ^ 12 = 1.000.000.000.000.

Tebibyte 'T' 'TiB': 2 ^ 40 = 1.099.511.627.776.

Petabyte 'PB': 10 ^ 15 = 1.000.000.000.000.000.

Pebibyte 'P' 'PiB': 2 ^ 50 = 1.125.899.906.842.624.

Exabyte de 'EB': 10 ^ 18 = 1.000.000.000.000.000.000.

Exibidor de 'E' 'EiB': 2 ^ 60 = 1.152.921.504.606.846.976.

Zettabyte 'ZB': 10 ^ 21 = 1.000.000.000.000.000.000.000

'Z' 'ZiB' 2 ^ 70 = 1.180.591.620.717.411.303.424.

Yottabyte 'YB': 10 ^ 24 = 1.000.000.000.000.000.000.000.000.

'Y' 'YiB' 2 ^ 80 = 1.208.925.819.614.629.174.706.176.

Os padrões de tamanho de bloco podem ser substituídos por uma opção explícita '--block-size = SIZE'. A opção '-k' é equivalente a '--block-size = 1K', que é o padrão, a menos que a variável de ambiente 'POSIXLY_CORRECT' esteja configurada. A opção '-h' ou '- legível por humanos' é equivalente a '--block-size = legível por humanos'. A opção '--si' é equivalente a '--block-size = si'.


Ok, então, lendo o homem resize2fs, ele fala sobre K, M, G ... etc. e refere-se a ele como megabytes e gigabytes? Isso não é estranho? Não deveriam ser mebibytes e gibibytes? Ou ainda estou faltando alguma coisa?
Matt

Sim, faltando apenas o estranho argumento de nomeação entre megabytes, que significa 1.000.000 bytes (que os fabricantes gostam de usar porque é "maior" e o prefixo "mega" implica)) ou 1.048.576 bytes (que os computadores geralmente usam há décadas). Tenho a tendência de concordar com o autor da página de manual resize2fs (Theodore Ts'o? Provavelmente não) e pensar que o "byte" em megabytes lhe dá o poder de 2 com mais de um milhão de bytes de significado e o "ib" em kibibyte, mebibyte, gibibyte é bastante bobo. Lembra-me do "Linux não é realmente chamado Linux, você deveria chamá-lo de GNU-Linux porque ... razões?" argumento
Xen2050 02/04

1
O autor afirma que "algumas pessoas politicamente corretas insistem que deve parecer estúpido ..." Mas ESTAMOS NO LINUX, não no mundo das janelas, portanto não devemos ter essas ambigüidades. Especialmente ao usar uma poderosa ferramenta de particionamento de disco de baixo nível!
Matt

Bem, o que está em um nome de qualquer maneira, um disco por qualquer outro nome ainda deixaria de funcionar tão duro ...
Xen2050
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.