Окончательное обновление:
Я уже знал, что мне нужно было сделать, чтобы решить эту проблему; Я просто не знал, как это сделать. Я надеялся, что найдется какой-нибудь готовый инструмент, который сделает это автоматически, но не смог найти. Я принимаю ответ Рода, потому что, несмотря на то, что он не решает мою проблему напрямую, он дает очень хорошую предысторию проблемы размера сектора и вселяет в меня уверенность, что проблема действительно была в выравнивании разделов и их решении. Для тех, кто приходит к этому вопросу с такой же проблемой, прочитайте его внимательно и внимательно, включая комментарии, прежде чем что-либо делать.
В начале
У меня был компьютер, и мне нужно больше места. Я купил новый диск на 500 ГБ и корпус USB. Вскоре я заметил, что если я разделю диск на корпусе и перенесу его на компьютер, он не распознает разделы (и наоборот). Я предположил, что это была проблема с корпусом и не беспокоился об этом.
Затем трагедия
В прекрасный день мой компьютер решил больше не включаться. Оказывается, материнская плата (без маркировки, просто большая надпись «Сделано в Китае») мертва. Я использовал его в качестве файлового сервера, и этот диск на 500 ГБ теперь полон данных, которые я не могу позволить себе потерять. Я сейчас сломался и не могу позволить себе новый компьютер, поэтому моей единственной надеждой был «неисправный» USB-корпус.
Расследование
Вооружившись несколькими дистрибутивами Linux, ноутбуком, VirtualBox и корпусом, я провел криминалистический анализ по этому вопросу. dmesg сообщил, что размер раздела не соответствует концу диска. Поэтому я просмотрел таблицы данных жесткого диска, рассчитал количество секторов с нуля, вручную проверил границы диска с помощью dd, и все выглядело нормально, пока я не запустил fdisk и не сказал:
Note: Sector size is 4096 (not 512).
Как скромно из fdisk. Эта «записка» была корнем всех проблем. После некоторого возмущения были сделаны следующие выводы:
Корпус USB не неисправен.
Контроллер SATA на ныне не работающей материнской плате, по крайней мере, «странный». Он не сообщил 4096-байтовых секторов операционной системе, поэтому ОС успешно создала MBR, используя 512-байтовые адреса секторов.
Теперь, когда я пытаюсь получить доступ к разделу, ОС пытается использовать 512-байтовые адреса на дисковом секторе 4096 байт, и, конечно, это не сработает.
Вопрос
Итак, как я могу исправить адреса в MBR так, чтобы они были действительны для сектора размером 4096 байт, кроме ручного редактирования MBR в hex-редакторе, и
Разделы не выровнены для 4096-байтовых секторов. Существует ли какой-либо инструмент, позволяющий выровнять их, помимо копирования на другой диск? (У меня нет запасных дисков), или мне нужно будет создать какой-нибудь инструмент, который за один раз «сдвигает» данные в сторону? Перегородки ext3.
Благодарность!
Обновить:
Я обнаружил, что есть умный способ использовать dd для перемещения раздела на месте в этом вопросе: Как переместить раздел в GNU / Linux? Но я не знаю, будет ли это работать на каком-то участке сектора. Я не могу проверить это сейчас, но сделаю, когда у меня будет время.
Обновление 2:
Итак, я успешно выровнял раздел, используя метод выше, и отредактировал MBR вручную в шестнадцатеричном редакторе. Как только я снова подключил жесткий диск, раздел стрелы автоматически монтируется! Я не рекомендую это, хотя, во время процесса были ошибки ввода-вывода, и я мог потерять все, см. Комментарий к ответу Рода. Что касается другого раздела, я не буду рисковать и буду использовать старый жесткий диск и выравнивать порции, копируя данные, а затем вставляя их обратно в другую позицию.
источник
fdisk
для редактирования MBR (я узнал об этом позже, нет необходимости в hex-редакторах :)). Вы можете изменить каждую начальную точку входа и размер, и просмотреть изменения перед применением. Итак: запуститеfdisk
, запишите текущую конфигурацию (или, лучше, сделайте резервную копию MBRdd
), умножьте значения начального адреса и размера на 8 и измените их. Не забудьте проверить все с помощью калькулятора и понять, что означают значения. Вы увидите, что Size = End - Start + 1fdisk
показывает размер в 1000-секторных единицах, поэтому вам может потребоваться включить экспертный режим, чтобы увидеть реальное значение и т. Д.Ответы:
Вопросы размера сектора становятся довольно сложными. До конца 2009 года подавляющее большинство жестких дисков использовали сектора по 512 байт, и это было все. В конце 2009 года производители дисков начали внедрять так называемые диски расширенного формата (AF), в которых используются 4096-байтовые сектора. Эти первые диски AF (и, AFAIK, все диски AF сегодня) представляют интерфейс для компьютера, на котором каждый 4096-байтовый физический сектор разделен на восемь логических секторов по 512 байтов . Это преобразование позволяет продолжать работать более старым инструментам, включая многие BIOS, которые были построены с допущениями в 512 байт. Я не знаю, использует ли ваш диск AF или нет, но в любом случае он почти наверняка использует 512-байтовый размер логического сектора, что означает, что интерфейс к ОС должен использовать 512-байтовые сектора.
Сложность имеет значение в некоторых USB-дисках. Некоторые из этих корпусов делают обратное тому, что делает AF: они берут восемь секторов диска и объединяют их в один новый 4096-байтовый сектор. Я не уверен, в чем причина этого шага, но одно практическое преимущество заключается в том, что со старой системой разбиения MBR можно использовать диски размером более 2 ТБ. Одним из основных недостатков является то, что диск, разделенный на один из этих корпусов, нельзя использовать напрямую или в корпусе, который не выполняет этот тип перевода. Аналогично, диск, подготовленный без этого перевода, не может быть использован при переносе в такой корпус. Обратите внимание, что эта проблема выходит далеко за рамки самой MBR; ваш диск может идентифицировать первый раздел как начинающийся в (512-байтовом) секторе 2048, но если ваша ОС будет искать (4096-байтовый) сектор 2048,найти начало этого раздела! Вы столкнулись с этой проблемой. Таким образом, ваша первоначальная мысль о том, что это ошибка USB-корпуса, ближе к цели, чем ваша недавняя мысль о том, что ваша материнская плата испортила его. Я никогда не слышал о материнской плате, переводящей размер сектора таким образом. (Однако некоторые аппаратные устройства RAID делают это.)
Я не знаю, как заставить Linux изменить представление о размере сектора, но если у вас достаточно места на диске, может помочь копирование низкоуровневого диска на другой диск. Например:
Это скопирует ваш диск с
/dev/sdb
(USB-диск; при необходимости отрегулируйте) в файл~/image.img
. Затем вы можете использовать следующий скрипт для монтирования разделов образа:Сохраните скрипт как, скажем,
mount_image
и используйте его так:Это смонтирует раздел 2
image.img
в/mnt
. Обратите внимание, что скрипт использует GPT fdisk (gdisk
) , который большинство дистрибутивов включает в пакет с именемgptfdisk
orgdisk
.В конечном счете, лучшим решением будет найти способ подключения диска, который не будет выполнять преобразование размера сектора. Прямое подключение к новой материнской плате должно помочь; или вы можете найти внешнюю оболочку, которая не выполняет перевод. Фактически, некоторые корпуса выполняют преобразование на портах USB, но не на портах eSATA, поэтому, если в вашем корпусе есть порт eSATA, вы можете попробовать использовать это. Я понимаю, что все эти решения, вероятно, будут стоить денег, которых, как вы говорите, у вас нет, но, возможно, вы сможете обменять свое приложение для перевода на то, которое не выполняет перевод.
Другой вариант, который мне приходит в голову, это попытаться использовать виртуальную машину, такую как VirtualBox. Такой инструмент может иметь размер сектора в 512 байт при обращении к дисковому устройству, что фактически отменяет перевод; или вы можете скопировать содержимое диска в исходном виде (как в
dd if=/dev/sdc of=/dev/sdb
) на виртуальной машине, что может скопировать содержимое со сжатием, что позволит образу поместиться на меньшем дисковом пространстве, чем потребляет оригинал.источник
dd
! Если вы не очень осторожны и не понимаете вещи чрезвычайно хорошо (или чрезвычайно удачливы), вы, скорее всего, испортите вещь, чем исправите ее. Мне кажется, что вы можете настроить таблицу разделов, используяfdisk
: Резервное копирование оригинала, а затем разделите начальную точку каждого раздела на 8 (и установите конечные точки как конечные непосредственно перед начальной точкой следующего раздела). Это имеет шанс только в том случае, если все значения начальной точки раздела кратны 8.dd
клон, подключенный через USB, и я подумал, что клон не удался. Но когда я подключил SSD непосредственно к материнской плате вместо моего старого жесткого диска, все работало нормально!Этот сценарий обобщает предложение Рода Смита, когда у вас есть рейд или криптография. Нет гарантии Не стесняйтесь улучшать это! (Обновлено с последними сведениями о mdadm)
источник
Другой, довольно простой способ сделать это - использовать функцию спасения parted. Это требует от вас создания новой метки диска, так что это сопряжено с риском. Parted действует непосредственно на диске, поэтому при необходимости создайте резервные копии перед запуском parted. Тогда начните:
parted скажет вам что-то вроде этого при попытке прочитать диск с размером сектора, отличным от того, с которым была создана таблица разделов:
Используйте mklabel для создания нового MBR или GPT в соответствии с тем, что вы ранее использовали
Затем запустите Rescue, чтобы найти свой старый раздел
Повторите процесс восстановления, если у вас есть больше разделов. Теперь вы сделали.
источник
У меня возникла эта проблема, когда я удалил диск объемом 4 ТБ из внешнего корпуса WD My Book. Проблема в:
Решение: Перепишите таблицу разделов в GPT, преобразовав значения, чтобы использовать 512-байтовые сектора.
В моем случае раздел начинался со смещением 1 МБ и заканчивался (~ 856 КБ) до конца диска. Это хорошо, потому что тогда он разрешил MBR + GPT (17408 байт) перед разделом и резервный GPT (16896 байт) в конце диска.
Я сделал изображения обоих регионов на всякий случай (используя dd).
Я отметил выход из
fdisk -l /dev/sde
.Я использовал gdisk для удаления первого раздела. Если вы хотите, вы можете сделать, как я, и изменить значение выравнивания на 8 (4096), чтобы использовать как можно больше места. Затем я создал новый раздел с началом в 2048 году и концом в конце диска. Я вырасту файловую систему позже.
К счастью, изменение размера сектора не влияет на файловую систему, LVM или LUKS.
источник