Por que um disco de 3 TB seria 746GiB?

3

Eu tenho um HDD de 3TB e o DVD ao vivo do Ubuntu 14.04 está mostrando como sendo 746.5GiB. Eu já vi esse tipo de problema com outros discos em outras situações antes e nunca encontrei uma solução. Eu até tive Seagate substituir um disco rígido me dizendo que eles não foram capazes de consertar o HDD depois de uma ferramenta de imagem de disco de alguma forma permanentemente disse ao disco rígido que era um disco menor. Duas perguntas

  • como isso acontece
  • e como faço para corrigir isso?

Antecedentes do disco rígido para este caso

  • O disco costumava fazer parte de um RAIDZ do ZFS usando o disco nu em vez de uma partição.
  • ficou em uma prateleira por alguns meses.
  • usei o gparted para tentar excluir tudo no disco

Atualmente estou executando o comando

root@ubuntu:/home/ubuntu# dd if=/dev/zero of=/dev/sdd bs=16M

Antes disso eu corria:

root@ubuntu:/home/ubuntu# dd if=/dev/zero of=/dev/sdd bs=10M count=128
128+0 records in
128+0 records out
1342177280 bytes (1.3 GB) copied, 42.8214 s, 31.3 MB/s
root@ubuntu:/home/ubuntu# smartctl -i /dev/sdd
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Western Digital Caviar Green (AF, SATA 6Gb/s)
Device Model:     WDC WD30EZRX-00DC0B0
Serial Number:    {blanked}
LU WWN Device Id: 5 0014ee 0036bc22d
Firmware Version: 80.00A80
User Capacity:    3,000,592,982,016 bytes [3.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-2 (minor revision not indicated)
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 1.5 Gb/s)
Local Time is:    Sun Jul 17 07:44:41 2016 UTC
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
root@ubuntu:/home/ubuntu# gdisk -l /dev/sdd
GPT fdisk (gdisk) version 0.8.8

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.
Disk /dev/sdd: 1565565872 sectors, 746.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 1F876634-0284-4A1C-8FDF-34A255B9DCCC
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 1565565838
Partitions will be aligned on 2048-sector boundaries
Total free space is 1565565805 sectors (746.5 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
root@ubuntu:/home/ubuntu# 

Editar: Info extra. Está ligado através de um usb hdd doc. Talvez esta seja a fonte do problema. Eu vou religar por isso é conectado diretamente a uma porta sata na placa-mãe. Enquanto isso, aqui está a informação extra solicitada.

root@ubuntu:/home/ubuntu# sg_readcap --16 /dev/sdd
READ CAPACITY (16) not supported
root@ubuntu:/home/ubuntu# sg_readcap  /dev/sdd
Read Capacity results:
   Last logical block address=1565565871 (0x5d50a3af), Number of blocks=1565565872
   Logical block length=512 bytes
Hence:
   Device size: 801569726464 bytes, 764436.5 MiB, 801.57 GB
root@ubuntu:/home/ubuntu# hdparm -N /dev/sdd

/dev/sdd:
 max sectors   = 5860533168/1(5860533168?), HPA setting seems invalid (buggy kernel device driver?)
    
por BeowulfNode42 17.07.2016 / 10:06

1 resposta

6
root@ubuntu:/home/ubuntu# sg_readcap --16 /dev/sdd
READ CAPACITY (16) not supported

Isso significa que quando o encaixe USB traduz a capacidade dos dados do ATA IDENTIFY DEVICE da unidade (vistos em hdparm -I / smartctl -i ), ele pode, no máximo, relatar um tamanho de até 32 bits (ou seja, 0xffffffff, 4294967295) termos do número de setores lógicos. Esta é uma limitação hereditária de SCSI READ CAPACITY (10):

Logical Sector Size | Maximum capacity supported (TiB / TB)
         512        |              ~2.0 /  ~2.2
        4096        |             ~16.0 / ~17.6

Como sua unidade é uma unidade AF 512e que possui setores lógicos de 512 bytes, 5860533168 / 0x15d50a3b0, requer 33 bits para representar, somente uma ponte SATA / USB que suporta SCSI READ CAPACITY (16) pode manipulá-lo corretamente. Quando o tamanho é truncado para 32 bits, ele muda de:

101011101010100001010001110110000 (5860533168)

para

 01011101010100001010001110110000 (1565565872)

O kernel Linux, ou provavelmente todos os sistemas operacionais, basicamente nunca emitirá o comando ATA IDENTIFY DEVICE "diretamente" (ou seja, encapsulado em um comando SCSI ATA PASS-THROUGH) para drives USB, mas comandos SCSI READ CAPACITY (que você emitiu manualmente com sg_readcap ), para obter a capacidade deles.

Somente quando as unidades são, na verdade, unidades SATA conectadas com uma ponte SATA / USB, o comando será manipulado pela camada de tradução SCSI-ATA implementada na ponte, que emitirá o comando ATA IDENTIFY DEVICE para a unidade SATA. as informações necessárias para formar os dados de resposta para o comando READ CAPACITY.

Mas utilitários como hdparm e smartctl são (quase) exclusivamente para drives ATA, então eles praticamente fazem tudo com o ATA PASS-THROUGH. (Também porque são utilitários do espaço do usuário, espera-se que você, o usuário, os use apenas no tipo apropriado de dispositivos.) É por isso que você acaba obtendo uma capacidade diferente em locais diferentes.

    
por 17.07.2016 / 21:23