디스크 파티션 테이블을 다른 장치에 저장하고 grub에서 로드할 수 있는지 궁금합니다.
편집하다: 내 디스크가 다음과 같이 포맷되었다고 가정해 보겠습니다.
보통 MBR 로딩 후(디스크 1)시작 시 시스템에 3개의 파티션과 할당되지 않은 공간만 표시됩니다.
하지만 다른 시나리오를 만드는 것이 가능한지 궁금합니다. 이 디스크에 대해 다음과 같은 데이터 테이블이 있다고 가정해 보겠습니다.
내가 원하는 것은 디스크에 있는 드라이브 대신(교체하지 않고) 다른 드라이브(grub도 설치되어 있음)에서 이 교체 파티션 테이블을 로드하고 여기에서 OS를 부팅하는 것입니다.
답변1
그렇다면 분할되지 않은 공간으로 보이는 곳에 두 번째 운영 체제를 숨기려고 하시나요? 이는 매우 안전한 방법은 아닙니다. 예를 들어 testdisk
디스크에서 실행하면 파티션을 감지하고 이를 실제 파티션 테이블에 추가하도록 제안합니다. 나는 모든 포렌식 도구가 "할당되지 않은 공간"에 일부 구조화된 콘텐츠가 있는 것으로 보이는 것을 신속하게 감지할 수 있기를 바랍니다.
하지만 물론 임시검사를 통과할 수도 있다.
GRUB이 이 작업을 쉽게 수행할 수는 없을 것 같지만, 외부 부팅 드라이브에 커널 및 initramfs 파일이 있으면 initramfs에서 쉽게 수행할 수 있습니다. 매핑 테이블(기본적으로 이름 + 시작 위치) 블록 만들기 숫자 + 길이) 숨겨진 파티션의 경우 이를 사용하여 dmsetup create
매핑을 로드한 다음 initramfs를 /dev/mapper/hidden_root
루트 파일 시스템으로 마운트한 다음 기본적으로 부팅을 정상적으로 진행하되 필요한 경우 스왑 파티션 /dev/mapper/hidden_other
으로 마운트하여 사용합니다 ./dev/mapper/hidden_swap
각 숨겨진 파티션에 대한 매핑을 로드하려면 다음 명령을 실행할 수 있습니다.
dmsetup create <name> --table "0 <length in blocks> linear <disk major:minor> <first block #>"
<disk major:minor>
8:0
/dev/sda 와 같은 숨겨진 파티션을 포함하는 디스크 장치의 주 및 부 장치 번호입니다 .
첫 번째 숨겨진 파티션의 이름이 이면 hidden_root
이를 매핑하는 명령은 다음과 같습니다.
dmsetup create hidden_root --table "0 4236248 linear 8:0 952190894"
본질적으로 이는 "블록 #952190894에서 시작하는 디스크 /dev/sda의 선형 확장을 매핑하고 이를 /dev/mapper/hidden_root의 블록 0..4236248로 렌더링합니다."를 의미합니다.
GRUB가 대체 파티션 테이블을 읽도록 할 수 있더라도 Linux 커널은 펌웨어가 알려주는 내용에 의존하지 않고 파티션 테이블 자체를 읽어 파티션을 찾기 때문에 initramfs에서 이 작업을 수행해야 합니다.