임베디드 Linux 장치에 대한 원격 액세스(SSH)만 가능하고 운영 체제를 새 버전으로 업그레이드하는 것이 목표라고 가정해 보겠습니다. 장치에는 파티션이 하나만 있지만 50% 이상 사용되지 않으며 장치에서 사용할 수 있는 RAM은 약 256MB입니다. 무엇을 할 것인가? 내 생각에 해결책에는 tempfs와ivot_root가 포함될 수 있습니다.
이 작업을 수행하는 방법에 대한 막연한 아이디어는 다음과 같습니다.
- 새 rootfs 구조를 장치의 디렉터리에 업로드합니다.
- 임시 파일 시스템을 RAM에 마운트하고 필요한 시스템 리소스를 복사하여 rootfs가 처리되는 동안 시스템 실행을 유지합니다.
- ivot_root나 chroot 또는 둘 다를 사용하여 루트를 tempfs로 변경합니다. 확실하지는 않습니다.
- 업로드된 디렉터리에서 rootfs 구조를 복사하여 이전 디렉터리를 교체하세요.
- 새 버전의 운영 체제로 재부팅
제 생각에는 이것이 실제로 작동하기에는 너무 단순해 보입니다. 내 계획의 허점을 지적하고 내가 무엇을 놓치고 있는지 말해 주실 수 있나요? 아니면 올바르게 수행하는 방법을 더 잘 안내해 주실 수 있나요? 이런 일을 해본 경험이 있는 사람이 있나요?
답변1
chroot는 현재 프로세스의 루트만 변경하므로 나머지 파티션을 변경하면 시스템이 종료될 가능성이 높습니다(따라서 현재 프로세스도 종료됩니다).
ivot_root도 마찬가지입니다.
Hub_root는 루트 파일 시스템을 이동합니다.현재 프로세스의put_old 디렉토리로 이동하여 new_root를 새 루트 파일 시스템으로 만듭니다.
Raspberry Pi의 루트 파일 시스템을 업데이트해야 할 때 USB 드라이브를 여기에 연결하고 거기에서 부팅합니다. 임시 파일 시스템은 잘 작동하며 SD 카드를 제거하지 않고도 "실제" 루트 파일 시스템을 변경할 수 있습니다. (라즈베리 파이는 접근하기 어렵지만 USB 스틱을 연결할 수 있습니다.)
RAM 디스크로 "부팅"하는 적절한 방법을 생각할 수 없습니다.내부에시스템의 최종 부팅은 여전히 미디어에서 이루어집니다. 항상 CD를 넣어야 하는 모든 Linux Live CD를 생각해 보십시오.최대시스템의 내용은 이미 RAM에 있습니다.
파일 시스템을 다시 분할할 수 있는 경우 두 번째 파티션에 "새" OS를 설치하고 해당 OS를 활성 및 부팅 가능으로 표시할 수 있습니다.
- 두 번째 파티션의 파일 시스템을 다시 파티션합니다(새 운영 체제용).
- 새 파티션을 활성 및 부팅 가능으로 표시
- 새 파티션 포맷
- 두 번째 파티션에 새 운영 체제(또는 임시 운영 체제)를 설치합니다.
- 새(두 번째) 파티션에서 부팅하려면 부트로더(grub, LILO...)를 업데이트하세요.
- 재시작
- 첫 번째 파티션의 내용 삭제
- 첫 번째 파티션에 새 운영 체제를 설치합니다.
- 첫 번째 파티션에서 부팅하려면 부트 로더(grub, LILO...)를 업데이트하세요.
- 재시작
- 두 번째 파티션의 내용 삭제
- 두 번째 파티션 삭제
- 첫 번째 파티션의 크기를 전체 크기로 조정
실행 중 크기 조정은 어렵지만이 웹사이트이것이 가능할 수도 있다고 주장합니다. (2007년에!) 이 작업을 수행하려면 2GB RAM이 필요하다고 주장합니다.