4

У меня есть Linux Centos (5.0) машина с 2 дисками. Я сменил кабель SATA на один из дисков, когда понял, что в зависимости от того, какой слот SATA я использую, ОС запускается с sda или sdb.

Проблема в том, что у меня есть ежедневные резервные копии от sda до sdb (просто копии), если случайно кто-то поменяет кабель SATA, я испорчу и перезапишу новые данные старыми данными.

Единственное, что я знаю, это то, что текущий загрузочный диск - хороший. Как я могу точно знать, какой диск является текущим загрузочным диском (sda или sdb)?

Дополнительная информация: У меня нет физического доступа к машине.

5 ответов5

1

Во-первых, используйте дисковые UUID, как сказал @grawity.

Если вы хотите узнать UUID всего, что выглядит как блочное устройство для Linux, используйте команду blkid . Я думаю, что вы можете сделать что-то вроде blkid /dev/sda чтобы узнать UUID sda .

Другое, что вы можете сделать, это использовать символические ссылки в /dev/disk/by-id которые создаются для каждого диска на основе шины, к которой он подключен, а также сообщаемой модели и серийного номера.


Технически, Linux не знает и не заботится об устройстве, с которого он был загружен, потому что

  • это задача загрузчика - которая выполняется до запуска ядра - загружать ядро в память.
  • все, что не входит в ядро, необходимое для загрузки, находится в initramfs (initrd), например, драйверы, ранние утилиты пользовательского пространства - загрузка это тоже работа загрузчика.

Теперь, после загрузки Linux, загрузочные скрипты или любой другой механизм, работающий под ядром, пытается смонтировать корневую файловую систему, чтобы у вас были другие функции, кроме ядра, а также подкачки и т.д. В основном все вещи в вашем /etc/fstab . Это то, что вас действительно волнует, и этот файл будет содержать необходимую информацию. Вы можете использовать UUID в /etc/fstab (и я полагаю, что большинство дистрибутивов уже используют их), поэтому с помощью пары grep и cut вы можете получить UUID отсюда, что вам нужно.

Пример (это, вероятно, можно сделать лучше): cat /etc/fstab | grep "/ " | cut -f 1 -d " "

И вы можете использовать вывод этого для blkid чтобы найти UUID вашей корневой файловой системы или любого другого раздела.

0
awk '$2 == "/"' /proc/self/mounts
0

Наткнулся на это сам и нашел mount | head -n 1 | cut -d " " -f 1 возвращает узел устройства, который установлен в / (предполагая, что / всегда первый в списке)

0

Я бы также предложил использовать UUID, но если не считать того, что вы не используете LVM или RAID или что-то еще, что скрывает базовое блочное устройство с помощью "df", вы увидите, какой диск смонтирован. (Даже если вы используете LVM или RAID, у вас, вероятно, будет раздел /boot, который скажет вам об этом).

В качестве альтернативы «hdparm -a /dev /sdX» сообщит вам модель и серийный номер накопителя, чтобы вы могли запустить эту команду и выполнить команду grep, чтобы определить, какой жесткий диск какой.

-1

sudo fdisk -l выполнит это, и это работает, даже если вы подключены удаленно. Загрузочный раздел будет иметь звездочку рядом с ним.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .