상자는 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
둘 다 첫 번째 항목(기본 파티션의 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 config)에서도 사용될 수 있습니다. 따라서 grub 구성을 업데이트하고 initrd를 다시 생성할 수도 있습니다.
답변2
다른 커널에는 udev를 지원하고 다른 커널에는 udev(eudev)를 지원하지 않기 때문에 하드 드라이브를 계속 교체합니다!
예, sysv, openrc 및 s6 init 교체(systemd 교체)를 시도하기 시작했을 때도 이 문제로 인해 어려움을 겪었습니다.
문제는 동일한 디스크에 서로 다른 Linux vmlinuz 이미지를 빌드할 때 grub 유틸리티와 해당 구성 파일에 있습니다. 특히 하나의 커널 빌드에는 활성화되고 다른 커널 빌드에는 활성화되지 않는 경우 GRUB_DISABLE_LINUX_UUID
( /etc/default/grub
등)에 문제가 있습니다.
==이유 #1==
그럼... 범인은 누구죠? 이전 비시스템. Non-systemd는 어떤 SATA/IDE 커넥터가 사용되는지에 관계없이 sda 드라이브가 항상 시작 디스크 레이블이 되도록 스왑을 수행합니다.
드라이브 정렬 은 ATA(SATA 또는 libata 라이브러리) 장치에 의해 수행되며, 재정렬 은 파일에서 제거 됩니다 drivers/scsi/ida_probe()
.GRUB_DEVICE_BOOT
/etc/default/grub
==이유 #2==
CONFIG_SCSI_DEBUG
"yes"(또는 "vmlinuz 부팅 매개변수에서"와 함께 initramfs를 사용하는 경우 "m" )를 지정 scsi_debug=add_host:1
하면 기존 하드 드라이브의 "sd" 태그 인덱스의 인덱스 번호가 1씩 올라갑니다. 즉, 가 sda1
됩니다 sdb1
.