Unidades de mal entendido no fdisk / gdisk / parted

1

Eu estava passando por um problema de particionamento recentemente e não consegui descobrir qual utilitário estava usando MB ou MiB e por que eles não podiam ser 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 suponho serem megabytes e gigabytes ??) E no gdisk, eles são impressos em MiB ou GiB (que são mebibytes e gibibytes) ... E, em resize2fs, ele especifica nas páginas man que está em MB (que é megabytes). E se separaram, bem, eu nem olhei ainda ...

Agora, tendo em mente que 100 MB é totalmente diferente de 100 MiB e que essa informação é crucial para não perder todos os seus dados, qual é a regra prática atual?

    
por Matt 01.04.2017 / 00:56

1 resposta

1

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

Para o particionamento, eu definitivamente escolho o gparted, ele deve evitar qualquer confusão, mostrando a você quais unidades ele está usando claramente.

Meu man resize2fs , na verdade, 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 "maior" 1MB = 1.000.000 bytes preferido do fabricante:

$ 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 notar que está dizendo que a única partição é 3899392 blocos, mas subtrair o final desde o início rende duas vezes isso ... isso é estranho e incorreto, mas man fdisk diz "o fdisk é um buggy pro‐        grama que faz coisas difusas - geralmente acontece de produzir resultados razoáveis.        Sua única vantagem é que ele tem algum suporte para rótulos de disco BSD e outros        tabelas de partição não-DOS. Evite se puder. "
Recomende 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 isto:

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, gparted mostra tamanhos em (meus preferidos) M ou MiB (potências de 1024), e pode fazer todo o movimento / redução / redimensionamento / formatação também, se quiser, ou você só pode criar partições com ele e formate-os depois usando a partição "inteira" e não se preocupe com os tamanhos exatos.

Vocêpodequererlerapáginacoreutils.infonotamanhodobloco:

2.3Blocksize

SomeGNUprograms(atleast'df','du',and'ls')displaysizesin"blocks". You can adjust the block size and method of display to make sizes easier to read. The block size used for display is independent of any file system block size. Fractional block counts are rounded up to the nearest integer.

...

An integer block size can be followed by a suffix to specify a multiple of that size. A bare size letter, or one followed by 'iB', specifies a multiple using powers of 1024. A size letter followed by 'B' specifies powers of 1000 instead. For example, '1M' and '1MiB' are equivalent to '1048576', whereas '1MB' is equivalent to '1000000'.

A plain suffix without a preceding integer acts as if '1' were prepended, except that it causes a size indication to be appended to the output. For example, '--block-size="kB"' displays 3000 as '3kB'.

The following suffixes are defined. Large sizes like '1Y' may be rejected by your computer due to limitations of its arithmetic.

'kB' kilobyte: 10^3 = 1000.

'k' 'K' 'KiB' kibibyte: 2^10 = 1024. 'K' is special: the SI prefix is 'k' and the ISO/IEC 80000-13 prefix is 'Ki', but tradition and POSIX use 'k' to mean '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' exbibyte: 2^60 = 1,152,921,504,606,846,976.

'ZB' zettabyte: 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 defaults can be overridden by an explicit '--block-size=SIZE' option. The '-k' option is equivalent to '--block-size=1K', which is the default unless the 'POSIXLY_CORRECT' environment variable is set. The '-h' or '--human-readable' option is equivalent to '--block-size=human-readable'. The '--si' option is equivalent to '--block-size=si'.

    
por 01.04.2017 / 02:06