
상자는 Ubuntu 16.04를 실행하는 HP 마이크로서버입니다. 최근에 부팅 장치를 64GB SSD로 "업그레이드"했습니다. 또한 1TB SATA 드라이브가 있습니다.
/dev/sda1
일반적으로 기본 파티션(SSD의) 및 /dev/sda5
스왑으로 부팅 되고 /dev/sdb1
에 마운트된 1Tb HDD의 파티션을 가리킵니다 /mnt/media0
.
문제는 때때로 모든 것이 바뀌고 SSD는 이제 /dev/sdb1
이고 /dev/sdb5
미디어 파티션은 이제 입니다 /dev/sda1
.
/etc/fstab
물론 이로 인해 이전 이름을 사용하여 나열되었으므로 스왑 및 미디어 마운트가 실패하게 됩니다 /dev/sd*
.
그래서 나는 가지고있다:
BIOS를 확인한 결과 64GB SSD가 첫 번째 드라이브로, 1TB IDE가 두 번째 드라이브로 일관되게 나열됩니다.
볼륨 레이블로 미디어 드라이브를 참조하도록 변경하려고 했지만
/etc/fstab
이로 인해 Ubuntu 시작 시 오류가 발생하고 복구 모드로 전환되었습니다.스왑 및 (ext4) UUID를 사용하는 미디어 파티션을 참조하기 위해 변경을 시도했습니다
/etc/fstab
(실제로는 기본 파티션을 나열하므로).하지만그런 다음 두 번째 문제가 발생합니다.
다양한 파티션의 UUID를 찾기 위해 다음을 실행하면...
ls /dev/disk/by-uuid
blkid
둘 다 1개 항목(기본 파티션의 UUID)만 나열합니다. 다음을 사용하여 미디어 파티션의 UUID만 볼 수 있습니다(실제로 부팅 시 sdb1
분명히 할당됨).
tune2fs -l /dev/sdb1
그러나 다시 한 번 해당 UUID를 사용하면 /etc/fstab
Ubuntu가 부팅되지 않고 복구 모드로 들어갑니다.
그래서 내 질문은 다음과 같습니다.
/dev/sda
드라이브 간 교환을 가져 오거나/dev/sdb
중지할 수 있는 방법이 있습니까 ?에서 사용할 수 있도록 시스템에서 다른 파티션의 UUID를 확인하려면 어떻게 해야 합니까
fstab
?그리고/또는 스왑 및 미디어 파티션을 안정적으로 마운트할 수 있는 다른 방법이 있습니까?
답변1
에서 "디스크/ID별" 이름을 사용할 수 있습니다 /etc/fstab
.
ls -l /dev/disk/by-id
이러한 장치 이름은 다른 파일(initrd, grub configs)에서도 사용될 수 있습니다. 따라서 grub 구성을 업데이트하고 initrd를 다시 생성할 수도 있습니다.
답변2
다른 커널에는 udev를 지원하고 다른 커널에는 udev(eudev)를 지원하지 않기 때문에 하드 드라이브를 계속 교체합니다!
네, 저도 sysv, openrc 및 s6 init 교체(systemd 교체)를 실험하기 시작했을 때 이것에 물렸습니다.
문제는 동일한 디스크 내에서 서로 다른 Linux vmlinuz 이미지를 빌드할 때 grub 유틸리티와 구성 파일에 있습니다. 특히 하나의 커널 빌드에 대해 GRUB_DISABLE_LINUX_UUID
( /etc/default/grub
, et. al.)을 활성화하고 다른 커널 빌드에는 활성화하지 않을 때 문제가 발생합니다.
== 원인 #1 ==
그렇다면… 범인은 누구일까요? 오래된 비시스템. 어떤 SATA/IDE 커넥터가 사용되는지에 관계없이 sda 드라이브를 항상 시작 디스크 레이블로 만들기 위한 비시스템화에 의해 스왑이 발생합니다.
드라이브 주문은 ATA(SATA 또는 libata 라이브러리) 장치에 의해 수행되고 재정렬은 에 의해 수행됩니다 drivers/scsi/ida_probe()
. 파일 GRUB_DEVICE_BOOT
에서 해당 항목을 제거하세요 /etc/default/grub
.
== 원인 #2 ==
CONFIG_SCSI_DEBUG
"yes"(또는 vmlinuz bootparams에서 "와 함께 initramfs를 사용하는 경우 "m")로 지정하면 scsi_debug=add_host:1
기존 하드 드라이브의 "sd" 레이블 인덱스의 인덱스 번호가 1씩 푸시됩니다. 즉, 가 sda1
됩니다 sdb1
.