우선 루프백 파일시스템을 루트디바이스로 설정하는 원리 몇가지를 설명하겠습니다.
리눅스의 루프백 디바이스는 가상의 디바이스로서 실제의 미디어 디바이스와 똑같이 취급됩니다.
일반적인 실제 디바이스의 예로는 /dev/hda1, /dev/hda2, /dev/sda1 등의 하드디스크 파티션들이나 /dev/fd0 와 같은 플로피 디바이스등을 들 수 있습니다. 이런 디바이스들은 모두 파일및 디렉토리 구조를 담는 디바이스들입니다. 이들을 사용하려면 특정 파일시스템(ext2fs, msdos, ntfs 등등)으로 포맷한 후 마운트해야 합니다.
루프백 파일시스템이란 어떤 파일시스템의 파일 한개를 마치 하나의 디바이스처럼 인식시킨 것입니다. 이 파일은 다른 디바이스와 마찬가지로 포맷되고 마운트될 수 있습니다. 이렇게 하기위해서는 먼저 이 화일이 /dev/loop0 나 /dev/loop1 등과 같은 특수한 디바이스와 연결되어야 합니다. 그 다음에야 새로운 가상의 디바이스로 마운트될 수 있는 것입니다.
리눅스에서 파일시스템으로 마운트 가능한 가상디바이스가 또 한 종류 있는데 바로 램디스크 디바이스입니다.
램디스크란 별다른 물리적 장치를 지칭하는 것이 아니라, 바로 메모리의 일부를 디스크로 인식시킨 것입니다. 이 용도로 할당되는 메모리는 디스크로 스왑되지 않으며 디스크 캐쉬에 남게됩니다.
램디스크는 램디스크 디바이스인 /dev/ram0 나 /dev/ram1 등에 기록함으로서 즉각 만들수 있습니다. 이것 역시 루프백 디바이스와 같은식으로 포맷할 수있고 마운트도 가능합니다.
부팅시 램디스크를 이용할 경우(리눅스 배포본이나 복구용 디스크에서 주로 사용됩니다), 디스크 이미지(디스크의 전체 내용을 하나의 파일로 만든 것)가 부트플로피상에 압축된 상태로 위치하고 있습니다. 부팅이 시작되면 커널에 의해 이것이 자동적으로 압축이 풀리면서 램디스크로 로딩된 후 마운트되게 됩니다.
리눅스의 초기 램디스크(Initial Ramdisk) 디바이스는 루프백 디바이스를 루트 파일시스템으로 사용하는데 필요한 중요한 메카니즘입니다.
초기 램디스크가 사용되면, 파일시스템 이미지는 메모리로 복사된 후 마운트되고 그 화일들을 액세스 할 수 있게 됩니다. 램디스크상의 특정 프로그램(/linuxrc)이 실행된 후 종료하면, 이제 다른 디바이스가 루트 파일시스템으로서 마운트되게 됩니다. 기존의 램디스크 역시 계속 존속하지만 이것은 /initrd 라는 디렉토리로 마운트되거나 아니면 /dev/initrd 디바이스를 통해 계속 사용할 수 있습니다.
이런 방식은 다소 이상하게 보일 것입니다. 정상적인 부트과정이라면 지정된 루트파티션을 마운트해서 그대로 실행되면 될텐데 왜 이렇게 램디스크를 먼저 마운트 해서 동작시킨 후 그다음 진짜 루트파티션을 마운트할까요? 그 이유는 초기 램디스크의 옵션을 사용하면 진짜 부트 과정을 시작하기에 앞서 루트파티션을 변경할 수 있기 때문입니다.
루트 파일시스템이란 부팅이 끝난후 / 디렉토리로 마운트되는 디바이스를 말합니다.
루트 파일시스템은 다른 모든 파일들을 포함하게 되는 관계로 다소 복잡한 면이 있습니다. rc 스크립트 파일들을 부팅할 때, 이들은 /etc/rc.d 나 /etc/rc?.d 등에 위치합니다. 이는 /etc/init 프로그램의 버전에 따라 조금씩 다릅니다.
시스템이 일단 부트된 후에는 루트파티션을 언마운트하거나 변경하는 것이 불가능합니다. 왜나하면 다른 모든 프로그램이 이미 이 루트파티션을 사용하고 있기 때문입니다. 이때문에 초기 램디스크 이미지가 유용한 것입니다. 초기 램디스크를 이용하면 최종적인 루트 파티션을 부트시작시의 것과 달리할 수 있습니다.
부팅시 초기 램디스크의 동작과정을 아래에 순서대로 서술하겠습니다.
커널이 메모리로 로드된다. 이 일은 LILO 나 LOADLIN 등의 부트로더가 담당한다. 이 과정에서 Loading... 이라는 메시지를 볼수 있을 것이다.
램디스크 이미지가 메모리로 로드된다. 이 일 역시 LILO 나 LOADLIN 이 담당한다. 여기서도 Loading... 이라는 메시지가 나타날 것이다.
커널이 초기화된다. 이 과정에서 명령행의 옵션들이 해석되고 램디스크를 루트디바이스로 설정하게 된다.
초기 램디스크상의 /linuxrc 라는 프로그램이 실행된다.
루트 디바이스가 커널 파라메터에 설정된 대로 변경된다.
초기화 프로그램인 /etc/init 가 실행되어 사용자가 설정한 부트과정을 수행한다.
이상에서 초기 램디스크를 사용한 부팅과정을 간략히 설명하였습니다. 간략한 설명이었지만 커널이 어떻게 기동되고 초기 램디스크가 어디에서 사용되는지를 설명하는데는 충분합니다.