Saltar al contenido

¿Cómo corregir el MBR de sector de 512 bytes en un disco de sector de 4096 bytes?

Posteriormente a consultar con especialistas en el tema, programadores de varias ramas y maestros hemos dado con la respuesta al problema y la compartimos en este post.

Solución:

Los problemas relacionados con el tamaño del sector se están volviendo bastante complejos. Hasta finales de 2009, la gran mayoría de los discos duros usaban sectores de 512 bytes, y eso fue todo. A finales de 2009, los fabricantes de discos comenzaron a introducir los llamados Formato avanzado (AF), que utilizan sectores de 4096 bytes. Estos primeros discos AF (y, AFAIK, todos los discos AF actuales) presentan una interfaz a la computadora que muestra cada 4096 bytes físico sector dividido en ocho 512 bytes lógico sectores. Esta conversión permite que las herramientas más antiguas, incluidas muchas BIOS, que se crearon con supuestos de 512 bytes, sigan funcionando. No sé si su disco usa AF o no, pero en cualquier caso, es casi seguro que use un tamaño de sector lógico de 512 bytes, lo que significa que la interfaz del sistema operativo debería usar sectores de 512 bytes.

Para complicar las cosas, están ciertos receptáculos de discos USB. Algunos de estos gabinetes hacen lo contrario de lo que hace AF: toman ocho sectores de disco y los agrupan en un nuevo sector de 4096 bytes. No estoy seguro de cuál es el razonamiento detrás de este movimiento, pero una ventaja práctica es que los discos de más de 2TiB se pueden usar con el antiguo sistema de partición MBR. Una desventaja importante es que un disco particionado en uno de estos gabinetes no se puede usar directamente o en un gabinete que no realiza este tipo de traducción. Del mismo modo, un disco preparado sin esta traducción no se puede usar cuando se transfiere a dicho gabinete. Tenga en cuenta que este problema va mucho más allá del MBR en sí; su disco puede identificar que la primera partición comienza en el sector 2048 (512 bytes), pero si su sistema operativo buscara el sector 2048 (4096 bytes), lo haría no encuentra el inicio de esa partición! Te has encontrado con este problema. Como tal, su pensamiento inicial de que es culpa de la caja USB está más cerca de la marca que su pensamiento más reciente de que su placa base lo estropeó. He Nunca oído hablar de una placa base que traduce el tamaño del sector de esta manera. (Sin embargo, algunos dispositivos RAID de hardware lo hacen).

No conozco una forma de obligar a Linux a ajustar su idea del tamaño del sector, pero si tiene suficiente espacio en el disco, hacer una copia de disco de bajo nivel en otro disco puede ayudar. Por ejemplo:

dd if=/dev/sdb of=~/image.img

Esto copiará su disco de /dev/sdb (el disco USB; ajuste según sea necesario) al archivo ~/image.img. Luego puede usar el siguiente script para montar las particiones de la imagen:

#!/bin/bash
gdisk -l $1 > /tmp/mount_image.tmp
let StartSector=`egrep "^   $2|^  $2" /tmp/mount_image.tmp | fmt -u -s | sed -e 's/^[ t]*//' | head -1 | cut -d " " -f 2`

let StartByte=($StartSector*512)

echo "Mounting partition $2, which begins at sector $StartSector"

mount -o loop,offset=$StartByte $1 $3

rm /tmp/mount_image.tmp

Guarde el guión como, digamos, mount_image y utilícelo así:

./mount_image ~/image.img 2 /mnt

Esto montará la partición 2 de image.img para /mnt. Tenga en cuenta que el script se basa en GPT fdisk (gdisk), que la mayoría de las distribuciones incluyen en un paquete llamado gptfdisk o gdisk.

A largo plazo, una mejor solución es encontrar una forma de conectar el disco que no haga la traducción del tamaño del sector. Una conexión directa a una nueva placa base debería ser suficiente; o probablemente pueda encontrar un gabinete externo que no haga la traducción. De hecho, algunos gabinetes hacen la traducción en puertos USB pero no en puertos eSATA, por lo que si su gabinete tiene un puerto eSATA, puede intentar usarlo. Me doy cuenta de que es probable que todas estas soluciones cuesten dinero, que usted dice que no tiene, pero tal vez pueda cambiar su gabinete de traducción por uno que no se encarga de la traducción.

Otra opción que se me ocurre es intentar usar una máquina virtual como VirtualBox. Tal herramienta podría asumir un tamaño de sector de 512 bytes al acceder al dispositivo de disco, deshaciendo efectivamente la traducción; o es posible que pueda copiar el contenido del disco sin procesar (como en dd if=/dev/sdc of=/dev/sdb) dentro de la máquina virtual, que podría copiar el contenido con compresión, permitiendo así que la imagen quepa en menos espacio en disco del que consume el original.

Este script generalizó la propuesta de Rod Smith, cuando tienes un raid o una criptografía. Sin garantía. ¡Siéntete libre de mejorarlo! (Actualizado con el último hallazgo sobre mdadm)

#!/bin/sh
#
# This script solve the following problem:
#
# 1. create a GPT partition on a large disk while attached directly via SATA
#    when the device present itself with 512 bytes of block size:
#    sd 3:0:0:0: [sda] 5860533168 512-byte logical blocks: (3.00 TB/2.72 TiB)
#
# 2. try to use a SATA to USB adapter like ID 067b:2773 Prolific Technology, Inc.
#    this present the device with 4096 bytes of block size:
#    sd 19:0:0:0: [sdc] 732566646 4096-byte logical blocks: (3.00 TB/2.72 TiB)
#
# 3. The kernel is unable to read correctly the partition table with
#    the USB adaper.
#
#
# With the current tools (kernel and gdisk) in debian wheezy is
# possible to use losetup to remap the partitions to loop devices so
# you can use them as usual with any filesystem, raid or crypto
#
# I still do not know if this issue is originated by the adapter or by
# the disk and if there are any others workarounds.
#
# Known version of the software:
# $ apt-show-versions linux-image-3.2.0-4-amd64
# linux-image-3.2.0-4-amd64/wheezy uptodate 3.2.54-2
# $ apt-show-versions gdisk
# gdisk/wheezy uptodate 0.8.5-1


attach_device()  cut -d ' ' -f 1);
        size=$(printf "$line" 

detach_device()  cut -d : -f 1`;
    do
        losetup --verbose --detach "$loopdevice";
    done;


usage() 
cat <

Tuve este problema cuando quité un disco de 4TB de un gabinete externo WD My Book. El problema es:

  1. la tabla de particiones MBR está desfasada en un factor de 8 y
  2. la tabla de particiones MBR no puede manejar> 2TB cuando el tamaño del sector es 512.

Solución: Vuelva a escribir la tabla de particiones en un GPT, convirtiendo los valores para usar sectores de 512 bytes.

En mi caso, la partición comenzó con un desplazamiento de 1 MB y terminó (~ 856kB) antes del final del disco. Esto es bueno porque permitió el MBR + GPT (17408 bytes) antes de la partición y el GPT de respaldo (16896 bytes) al final del disco.

Hice imágenes de ambas regiones por si acaso (usando dd).

Noté la salida de fdisk -l /dev/sde.

Usé gdisk para eliminar la primera partición. Si lo desea, puede hacer lo que hice yo y cambiar el valor de alineación a 8 (4096) para usar tanto espacio como sea posible. Luego, creé una nueva partición con el inicio en 2048 y el final al final del disco. Haré crecer el sistema de archivos más tarde.

Afortunadamente, el cambio en el tamaño del sector no afecta el sistema de archivos, LVM o LUKS.

Eres capaz de añadir valor a nuestra información colaborando tu experiencia en los comentarios.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *