암호화되지 않은 라이브 데이터가 저장된 HDD에 실행 중인 Linux 시스템이 설치되어 있습니다. 전체 HDD에 대해 적절한 dm 암호화를 수행하는 합리적인 방법이 있습니까? (백업, 복원, 새 파일 시스템으로 전송할 필요가 없습니다.)
가능하다면 온라인으로 할 수 있는 방법이 있나요? 즉, 한 시간 정도 안에 Linux 시스템을 작동하여 모든 데이터를 암호화할 수 있습니까?
답변1
(a) 여유 디스크 공간이 충분하고 (b) LVM을 사용하는 경우 다음을 수행할 수 있습니다.
- 백업을 하세요.
- 1단계를 다시 읽고 이번에는 무시하지 마세요.
- 1단계를 다시 읽고 아직 실제로 테스트하지 않았다는 것을 기억하세요. 그래도 작동해야합니다!
- 현재 물리 볼륨 줄이기(
pvresize
) - 기본 파티션의 크기를 조정합니다. 안타깝게도 파티션 테이블(사용 중)을 다시 읽으려면 재부팅해야 할 수도 있습니다.
- 새 파티션을 생성하고 여기에 dm-crypt를 설정합니다. 그 위에 물리 볼륨을 배치합니다.
- 이제 이를 사용하여
pvmove
실제로 데이터를 온라인으로 이동할 수 있습니다. - 이동 중에 암호화된 볼륨을 부팅하려면 initramfs를 업데이트해야 합니다. 특히 모든 것을 암호화하려는 경우.
- 복구 디스크(예: Live CD)를 준비하세요. 재부팅하고 나타나는지 확인하십시오.
- 볼륨 그룹에서 이전 PV를 제거하고 안전하게 덮어씁니다.
- 이제 dm-crypt를 설정하고 동일한 vg에 두 번째 PV로 추가할 수도 있습니다.
LVM을 사용하지 않는다면 아마도 절망적일 것입니다. 확실히 rsync를 사용하여 한 파일 시스템에서 다른 파일 시스템으로 데이터를 복사할 수 있지만 시스템이 유휴 상태일 때 최종 동기화를 수행해야 합니다(그렇지 않으면 파일을 복사하려고 할 때 파일이 변경됩니다).
답변2
답변3
도구가 있어야 하는데 이름이나 URL을 제공할 수 없습니다. 하지만 두렵지 않다면 :-) 전혀 어렵지 않습니다. 암호화되지 않은 장치에서 데이터를 읽고 암호화된 장치에 쓰기만 하면 됩니다. 이전에 파일 시스템의 크기를 조정하여 더 작게 만들지 않으면 LUKS를 사용할 수 없습니다. 물론 이것은 설치 중인 장치에서는 작동하지 않습니다(ro가 설치되어 있어도 작동하지 않을 수 있습니다). 충돌에 대한 보호 기능이 없는 핵심 기능은 다음과 같습니다(예, 방금 성공적으로 시도했습니다).
for((i=0;i<100;i++)); do
echo "Copying block with offset ${i} to tmpfs"
dd if=/dev/storage2/test of=/mnt/tmpfs/cryptoblock skip=$i bs=10M count=1 &>/dev/null
echo "Copying block with offset ${i} from tmpfs"
dd if=/mnt/tmpfs/cryptoblock of=/dev/mapper/crypt_test seek=$i bs=10M count=1
done
필요한 개선 사항은 블록을 비휘발성 미디어에 복사하고 해당 오프셋을 기록하는 것입니다. 충돌이 발생하면 중단된 트랜잭션의 블록을 수동으로 복사하고 다음 블록의 오프셋을 시작 값으로 사용하여 루프를 시작할 수 있습니다.