Chapter 08. 리눅스의부팅과종료
00. 개요 01. 리눅스시스템의부팅 02. init 프로세스와런레벨 03. 리눅스시스템의종료 04. 데몬프로세스 05. 부트로더
리눅스시스템의부팅과정을이해하고부트로더의역할을설명할수있다. init 프로세스의역할을설명할수있다. init 프로세스와관련된스크립트를설명할수있다. 스크립트를사용하여서비스를시작하고종료할수있다. 런레벨이무엇인지설명하고런레벨을변경할수있다. 리눅스시스템을종료할수있다. 데몬을이해하고수퍼데몬의역할을설명할수있다. 단일사용자모드로부팅할수있다. 긴급상황에서계정의암호를복구할수있다.
리눅스실습스터디맵
00 개요 [ 그림 8-1] 8 장의내용구성
01 리눅스시스템의부팅 리눅스시스템의부팅과정 바이오스단계 PC 의전원스위치를켜서부팅하면제일먼저바이오스 (BIOS, basic input/output system) 가동작 바이오스는 PC 에장착된기본적인하드웨어 ( 키보드, 디스크등 ) 의상태를확인한후부팅장치를선택하여부팅디스크의첫섹터에서 512 바이트를로딩 이 512 바이트가마스터부트레코드 (master boot record, MBR): 2 차부팅프로그램 ( 부트로더 ) 의위치저장
01 리눅스시스템의부팅 부트로더단계 바이오스단계에서 MBR 는부트로더를찾아메모리에로딩 부트로더는여러운영체제중에서부팅할운영체제를선택할수있도록메뉴를제공 부트로더는리눅스커널을메모리에로딩 리눅스커널은 /boot 디렉터리아래에 vmlinuz-버전명 의형태로제공 리눅스의대표적인부트로더로는 GRUB와 LILO user1@myubuntu:~$ ls /boot/vm* /boot/vmlinuz-3.11.0-12-generic user1@myubuntu:~$
01 리눅스시스템의부팅 커널초기화단계 커널은가장먼저시스템에연결된메모리, 디스크, 키보드, 마우스등장치들을검사 장치검사등기본적인초기화과정이끝나면커널은 fork를사용하지않고생성되는프로세스와스레드생성 이프로세스들은메모리관리같은커널의여러가지동작을수행 이들프로세스는일반적인프로세스와구분되도록대괄호 ([ ]) 로표시하며, 주로 PID 번호가낮게배정 user1@myubuntu:~$ ps -ef more UID PID PPID C STIME TTY TIME CMD root 1 0 0 12:46? 00:00:02 /sbin/init root 2 0 0 12:46? 00:00:00 [kthreadd] root 3 2 0 12:46? 00:00:00 [ksoftirqd/0] root 5 2 0 12:46? 00:00:00 [kworker/0:0h] root 7 2 0 12:46? 00:00:00 [migration/0] root 8 2 0 12:46? 00:00:00 [rcu_bh] root 9 2 0 12:46? 00:00:00 [rcu_sched] root 10 2 0 12:46? 00:00:00 [watchdog/0] root 11 2 0 12:46? 00:00:00 [khelper] root 12 2 0 12:46? 00:00:00 [kdevtmpfs] root 13 2 0 12:46? 00:00:00 [netns] ( 생략 )
01 리눅스시스템의부팅 init 실행단계 init 실행단계에이르면리눅스가본격적으로동작하기시작 기본적으로메시지가보이지않도록하고대신에부트스플래시 (boot splash) 라고하는이미지를출력 부트스플래시화면이진행중일때 ctrl+d 키를누르면메시지가출력되는화면으로전환 [ 그림 8-5] 우분투스플래시화면 [ 그림 8-6] 부팅메시지출력화면
01 리눅스시스템의부팅 부팅후메시지확인 부팅시출력된메시지는 dmesg 명령이나 more /var/log/boot.log 명령으로확인가능 user1@myubuntu:~$ dmesg more [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.11.0-12-generic root =UUID=4c270aab-6780-4f53-87a9-b8824b6d8b50 ro quiet splash [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Initializing CPU#0 [ 0.000000] xsave: enabled xstate_bv 0x7, cntxt size 0x340 [ 0.000000] allocated 2097144 bytes of page_cgroup ( 생략 )
01 리눅스시스템의부팅 1 번프로세스 전통적으로유닉스에서는 init 프로세스가처음생성된프로세스로서 PID 가 1 번 user1@myubuntu:~$ ps -ef more UID PID PPID C STIME TTY TIME CMD root 1 0 0 11:15? 00:00:0 /sbin/init root 2 0 0 11:15? 00:00:00 [kthreadd] root 3 2 0 11:15? 00:00:00 [ksoftirqd/0] ( 생략 ) 로그인프롬프트출력 마지막으로그래픽로그인시스템인 GDM(GNOME display manager) 을동작시키고, 로그인프롬프트출력 [ 그림 8-7] 로그인프롬프트화면
02 init 프로세스와런레벨 init 프로세스 init 프로세스는 PID 가 1 번인프로세스로모든프로세스의조상역할 우분투는자체적으로개발한 upstart 를 init 대신사용하는데, 다만기존의유닉스및리눅스환경과의호환을위해실행파일이름은 init 를유지 init 의동작방식이바뀜에따라전통적으로 init 프로세스와관련된설정파일이었던 /etc/inittab 파일은이제우분투에서사라짐 user1@myubuntu:~$ ls /etc/inittab ls: /etc/inittab 에접근할수없습니다 : 그런파일이나디렉터리가없습니다 user1@myubuntu:~$
02 init 프로세스와런레벨 init 프로세스와스크립트파일 기존의 init 와새로운 upstart 는모두프로세스를실행하거나종료하기위해스크립트파일을사용 /etc/init 디렉터리와 /etc/init.d 디렉터리에같은서비스에대한파일이있다면 /etc/init 디렉터리의스크립트파일이우선적으로적용 upstart 가사용하는작업파일 upstart 와관련된스크립트파일은 /etc/init 디렉터리에 작업명.conf 파일로구성 user1@myubuntu:~$ ls /etc/init acpid.conf mountkernfs.sh.conf alsa-restore.conf mountnfs-bootclean.sh.conf alsa-state.conf mountnfs.sh.conf alsa-store.conf mtab.sh.conf anacron.conf network-interface-container.conf apport.conf network-interface-security.conf atd.conf network-interface.conf avahi-cups-reload.conf network-manager.conf avahi-daemon.conf networking.conf ( 생략 )
02 init 프로세스와런레벨 기존 init 프로세스 init 프로세스가실행하는스크립트파일은 /etc/init.d 디렉터리에위치 user1@myubuntu:~$ ls /etc/init.d README dbus procps single acpid dns-clean pulseaudio skeleton anacron friendly-recovery rc speech-dispatcher apparmor grub-common rc.local ssh apport halt rcs sudo atd irqbalance reboot udev avahi-daemon kerneloops resolvconf umountfs bluetooth killprocs rfkill-restore umountnfs.sh brltty kmod rfkill-store umountroot console-font lightdm rsync unattended-upgrades console-setup networking rsyslog urandom cron ondemand saned x11-common cups postfix sendsigs cups-browsed pppd-dns setvtrgb user1@myubuntu:~$ /etc/rc.d/init.d 디렉터리의 README 파일 : 전통적인 init 스크립트가 systemd 기반으로바뀌었다는것
02 init 프로세스와런레벨 기존 init 스크립트와 upstat 스크립트의관계 /etc/init.d 디렉터리에있는스크립트중일부는 /lib/init/upstart-job 에대한심벌릭링크 upstart-job 은해당서비스의 upstart 스크립트를찾아서실행 user1@myubuntu:~$ ls -l /etc/init.d grep upstart lrwxrwxrwx 1 root root 21 2월 20 21:12 anacron -> /lib/init/upstart-job lrwxrwxrwx 1 root root 21 4월 9 2013 atd -> /lib/init/upstart-job lrwxrwxrwx 1 root root 21 2월 20 21:12 bluetooth -> /lib/init/upstart-job lrwxrwxrwx 1 root root 21 2월 20 21:12 console-font -> /lib/init/upstart-job lrwxrwxrwx 1 root root 21 2월 20 21:12 console-setup -> /lib/init/upstart-job lrwxrwxrwx 1 root root 21 2월 20 21:12 cron -> /lib/init/upstart-job lrwxrwxrwx 1 root root 21 2월 20 21:12 friendly-recovery -> /lib/init/upstar-job lrwxrwxrwx 1 root root 21 2월 20 21:12 kmod -> /lib/init/upstart-job lrwxrwxrwx 1 root root 21 2월 20 21:12 resolvconf -> /lib/init/upstart-job lrwxrwxrwx 1 root root 21 2월 20 21:12 rfkill-restore -> /lib/init/upstart-job lrwxrwxrwx 1 root root 21 2월 20 21:12 rfkill-store -> /lib/init/upstart-job lrwxrwxrwx 1 root root 21 2월 20 21:12 setvtrgb -> /lib/init/upstart-job user1@myubuntu:~$
02 init 프로세스와런레벨 upstart 스크립트시작하고정지하기 initctl [start stop restart reload status] 작업명 [start stop restart reload status] 작업명 start, stop, restart, reload, status 명령은모두 initctl 명령에대한심벌릭링크 user1@myubuntu:~$ ls -l /sbin grep initctl -rwxr-xr-x 1 root root 179012 10월 10 00:05 initctl lrwxrwxrwx 1 root root 7 2월 20 21:12 reload -> initctl lrwxrwxrwx 1 root root 7 2월 20 21:12 restart -> initctl lrwxrwxrwx 1 root root 7 2월 20 21:12 start -> initctl lrwxrwxrwx 1 root root 7 2월 20 21:12 status -> initctl lrwxrwxrwx 1 root root 7 2월 20 21:12 stop -> initctl user1@myubuntu:~$
02 init 프로세스와런레벨 upstart 스크립트시작하고정지하기 initctl list : 전체작업목록출력하기 user1@myubuntu:~$ initctl list avahi-cups-reload stop/waiting avahi-daemon stop/waiting mountall-net stop/waiting mountnfs-bootclean.sh start/running passwd stop/waiting rc stop/waiting rsyslog start/running, process 464 startpar-bridge stop/waiting ( 생략 ) initctl status : 작업상태보기 user1@myubuntu:~$ initctl status rsyslog rsyslog start/running, process 464 user1@myubuntu:~$ status rsyslog rsyslog start/running, process 464 user1@myubuntu:~$
02 init 프로세스와런레벨 upstart 스크립트시작하고정지하기 initctl stop : 작업종료하기 user1@myubuntu:~$ sudo initctl stop rsyslog rsyslog stop/waiting user1@myubuntu:~$ initctl start : 작업시작하기 user1@myubuntu:~$ sudo start rsyslog rsyslog start/running, process 2718 user1@myubuntu:~$ initctl restart : 작업다시시작하기 user1@myubuntu:~$ sudo restart rsyslog rsyslog start/running, process 2732 user1@myubuntu:~$
02 init 프로세스와런레벨 init 스크립트시작하고정지하기 service 스크립트명 [start stop restart status] /etc/init.d/ 스크립트명 [start stop restart status]
02 init 프로세스와런레벨 init 스크립트시작하고정지하기 서비스상태보기 : service 스크립트 status user1@myubuntu:~$ sudo service cups status cups start/running, process 2757 user1@myubuntu:~$ 서비스종료하기 : service 스크립트 stop user1@myubuntu:~$ sudo service cups stop cups stop/waiting user1@myubuntu:~$ 서비스시작하기 : service 스크립트 start user1@myubuntu:~$ sudo service cups start cups start/running, process 2927 user1@myubuntu:~$ 서비스다시시작하기 : service 스크립트 restart user1@myubuntu:~$ sudo service cups restart cups stop/waiting cups start/running, process 2950 user1@myubuntu:~$
02 init 프로세스와런레벨 init 프로세스와런레벨 init 프로세스에서사용하던런레벨 (Run Level) 의개념에대한이해필요 init 는시스템의단계를일곱개로정의하여구분하고각단계에따라셸스크립트를실행하는데, 이단계들을런레벨이라고함 기존유닉스나페도라와달리우분투의런레벨은기본런레벨이 2 번임
02 init 프로세스와런레벨 init 프로세스와런레벨 런레벨 3, 4, 5 번이 2 번과같으므로, rc2.d 디렉터리와 rc3.d, rc4.d, rc5.d 디렉터리의내용이모두같음 user1@myubuntu:/etc$ ls rc*.d ( 생략 ) rc2.d: README S20speech-dispatcher S70dns-clean S99grub-common S20kerneloops S50rsync S70pppd-dns S99ondemand S20postfix S50saned S75sudo S99rc.local rc3.d: README S20speech-dispatcher S70dns-clean S99grub-common S20kerneloops S50rsync S70pppd-dns S99ondemand S20postfix S50saned S75sudo S99rc.local rc4.d: README S20speech-dispatcher S70dns-clean S99grub-common S20kerneloops S50rsync S70pppd-dns S99ondemand S20postfix S50saned S75sudo S99rc.local rc5.d: README S20speech-dispatcher S70dns-clean S99grub-common S20kerneloops S50rsync S70pppd-dns S99ondemand S20postfix S50saned S75sudo S99rc.local ( 생략 ) user1@myubuntu:/etc$
02 init 프로세스와런레벨 init 프로세스와런레벨 런레벨별로실행하는스크립트파일은 /etc/init.d 디렉터리에있는파일에대한심벌릭링크 user1@myubuntu:~$ ls -l /etc/rc2.d 합계 4 -rw-r--r-- 1 root root 677 6 월 5 2013 README lrwxrwxrwx 1 root root 20 2 월 20 21:12 S20kerneloops ->../init.d/kerneloops lrwxrwxrwx 1 root root 17 2 월 24 14:19 S20postfix ->../init.d/postfix lrwxrwxrwx 1 root root 27 2 월 20 21:12 S20speech-dispatcher ->../init.d/speechdispatcher lrwxrwxrwx 1 root root 15 2 월 20 21:12 S50rsync ->../init.d/rsync lrwxrwxrwx 1 root root 15 2 월 20 21:12 S50saned ->../init.d/saned lrwxrwxrwx 1 root root 19 2 월 20 21:12 S70dns-clean ->../init.d/dns-clean lrwxrwxrwx 1 root root 18 2 월 20 21:12 S70pppd-dns ->../init.d/pppd-dns lrwxrwxrwx 1 root root 14 2 월 20 21:12 S75sudo ->../init.d/sudo lrwxrwxrwx 1 root root 21 2 월 20 21:12 S99grub-common ->../init.d/grub-common lrwxrwxrwx 1 root root 18 2 월 20 21:12 S99ondemand ->../init.d/ondemand lrwxrwxrwx 1 root root 18 2 월 20 21:12 S99rc.local ->../init.d/rc.local user1@myubuntu:~$
02 init 프로세스와런레벨 init 프로세스와런레벨 런레벨변경하기 init는 1번프로세스의이름이기도하지만 init 프로세스의런레벨을바꾸는명령으로도사용 init를명령으로실행하면실제로는 /sbin/telinit가실행 init로런레벨을변경하기위해서는바꾸려는런레벨을숫자로지정 user1@myubuntu:~$ sudo init 1 기본런레벨지정하기 우분투에서기본런레벨은 /etc/init/rc-sysinit.conf 파일의 DEFAULT_RUNLEVEL 변수에지정 user1@myubuntu:~$ cat /etc/init/rc-sysinit.conf ( 생략 ) # Default runlevel, this may be overriden on the kernel command-line # or by faking an old /etc/inittab entry env DEFAULT_RUNLEVEL=2 ( 생략 ) user1@myubuntu:~$ 현재런레벨확인하기 : runlevel 명령 user1@myubuntu:~$ runlevel N 2 user1@myubuntu:~$
03 리눅스시스템의종료 리눅스를종료하는방법 shutdown 명령을사용한다. halt 명령을사용한다. poweroff 명령을사용한다. 런레벨을 0이나 6으로전환한다. reboot 명령을사용한다. 전원을끈다 -> 최후의수단
03 리눅스시스템의종료 shutdown 명령사용하기 리눅스시스템을가장정상적으로종료하는방법 shutdown 명령으로시스템즉시종료하기 -h 옵션과함께현재시간으로지정 user1@myubuntu:~$ sudo shutdown -h now
03 리눅스시스템의종료 shutdown 한다는메시지보내고종료하기 시스템을종료할때 shutdown 명령으로메시지를보낼수있음 사용자들이메시지를받고정리할시간이필요하므로시간을 now 로지정하면안되고특정시간을지정 예 : 2 분후에종료한다는메시지발송 user1@myubuntu:~$ sudo shutdown -h +2 "System is going down in 2 min" 사용자터미널출력 user1@myubuntu:~$ Broadcast message from user1@myubuntu (/dev/pts/1) at 23:31... The system is going down for halt in 2 minutes! System is going down in 2 min shutdown 명령으로시스템재시작하기 : -r 옵션사용 user1@myubuntu:~$ sudo shutdown -r +3 Broadcast message from user1@myubuntu (/dev/pts/1) at 23:32... The system is going down for reboot in 3 minutes!
03 리눅스시스템의종료 shutdown 명령취소하기 : -c 옵션 user1@myubuntu:~$ sudo shutdown -c 앞의 3 분후재시작명령취소할경우메시지출력 shutdown: Shutdown cancelled shutdown 메시지만보내기 : -k 옵션 user1@myubuntu:~$ sudo shutdown -k 2 Broadcast message from user1@myubuntu (/dev/pts/1) at 23:35... The system is going down for maintenance in 2 minutes!
03 리눅스시스템의종료 런레벨변경하기 런레벨을 0 으로바꾸면시스템이종료 user1@myubuntu:~$ sudo init 0 재시작하려면런레벨을 6 으로변경 user1@myubuntu:~$ sudo init 6
03 리눅스시스템의종료 기타시스템종료명령 시스템을종료하거나재시작하기위해사용할수있는명령 : halt, poweroff, reboot halt 와 poweroff 는 reboot 명령의심벌릭링크 user1@myubuntu:~$ ls -l /sbin/reboot -rwxr-xr-x 1 root root 13896 10 월 10 00:05 /sbin/reboot user1@myubuntu:~$ ls -l /sbin/halt lrwxrwxrwx 1 root root 6 2 월 20 21:12 /sbin/halt -> reboot user1@myubuntu:~$ ls -l /sbin/poweroff lrwxrwxrwx 1 root root 6 2 월 20 21:12 /sbin/poweroff -> reboot user1@myubuntu:~$ halt, reboot, poweroff 명령은 /var/log/wtmp 파일에시스템종료기록을남기고시스템을종료하거나재시작 사용할수있는옵션 -w : 실질적으로재시작하거나종료하지는않지만 wtmp 파일에기록을남긴다. -f : 강제로명령을실행하며 shutdown을호출하지않는다. -p : 시스템의전원을끈다.
04 데몬프로세스 데몬 (daemon) 리눅스의백그라운드에서동작하면서특정한서비스를제공하는프로세스 리눅스시스템에서동작하는각종서비스를제공하는프로세스들이바로데몬 데몬의동작방식 독자형 (standalone) 시스템의백그라운드에서서비스별로항상동작 자주호출되는데몬이아니라면시스템의자원을낭비할우려 수퍼데몬에의한동작방식 평소에는수퍼데몬만동작하다가서비스요청이오면수퍼데몬이해당데몬을동작시킴 독자형보다는서비스에응답하는데시간이약간더걸릴수있지만자원을효율적으로사용한다는장점 수퍼데몬 유닉스에서수퍼데몬의이름은 inetd 페도라에서는보안기능이포함된 xinetd를사용
04 데몬프로세스 데몬의조상 : init와커널스레드데몬 init 데몬 대부분의프로세스의조상프로세스 pstree 명령으로확인 user1@myubuntu:~$ pstree init NetworkManager dhclient dnsmasq 3*[NetworkManager] accounts-daemon 2*[accounts-daemon] acpid at-spi-bus-laun dbus-daemon 3*[at-spi-bus-laun] at-spi2-registr at-spi2-registr atd bluetoothd colord 2*[colord] cron cups-browsed ( 생략 )
04 데몬프로세스 커널스레드데몬 커널의일부분을프로세스처럼관리하는데몬 ps 명령으로확인했을때대괄호 ([ ]) 로둘러싸여있는프로세스들 예전에는대부분 k로시작했으나요즘은이를반드시준수하지는않음 커널데몬은대부분입출력이나메모리관리, 디스크동기화등을수행하며대체로 PID가낮은번호로할당 커널데몬을동작시키는조상데몬은커널스레드데몬 (kthreadd): PID 2번 user1@myubuntu:~$ ps -ef more UID PID PPID C STIME TTY TIME CMD root 1 0 0 23:38? 00:00:01 /sbin/init root 2 0 0 23:38? 00:00:00 [kthreadd] root 3 2 0 23:38? 00:00:00 [ksoftirqd/0] root 5 2 0 23:38? 00:00:00 [kworker/0:0h] root 7 2 0 23:38? 00:00:00 [migration/0] root 8 2 0 23:38? 00:00:00 [rcu_bh] root 9 2 0 23:38? 00:00:00 [rcu_sched] root 10 2 0 23:38? 00:00:00 [watchdog/0] root 11 2 0 23:38? 00:00:00 [khelper] root 12 2 0 23:38? 00:00:00 [kdevtmpfs] ( 생략 )
04 데몬프로세스 주요데몬
05 부트로더 GRUB 의개요 GRand Unified Bootloader 의약자로, 리눅스의전통적인부트로더인 LILO 의단점을보완하여 GNU 프로젝트의일환으로개발 GRUB 는 LILO 에비해다음과같은장점을가지고있음 LILO 는리눅스에서만사용이가능하지만 GRUB 는윈도에서도사용할수있다. LILO 에비해설정과사용이편리하다. 부팅시에명령을사용하여수정이가능하다. 멀티부팅기능을지원한다. GRUB 의가장최신버전은 GRUB2 로우분투에서기본부트로더로사용중
05 부트로더 GRUB2 관련디렉터리와파일 /boot/grub2/grub.cfg 파일 : 기존의 menu.lst 파일을대체하는기본설정파일 user1@myubuntu:~$ more /boot/grub/grub.cfg # # DO NOT EDIT THIS FILE # # It is automatically generated by grub-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub # ### BEGIN /etc/grub.d/00_header ### if [ -s $prefix/grubenv ]; then set have_grubenv=true load_env fi set default="0" if [ x"$feature_menuentry_id" = xy ]; then menuentry_id_option="--id" else menuentry_id_option="" fi ( 생략 )
05 부트로더 GRUB2 관련디렉터리와파일 /etc/grub.d 디렉터리 : GRUB 스크립트를가지고있으며 GRUB 의명령이실행될때순서대로읽혀 grub.cfg 파일이생성 user1@myubuntu:~$ ls /etc/grub.d 00_header 10_linux 20_memtest86+ 30_uefi-firmware 41_custom 05_debian_theme 20_linux_xen 30_os-prober 40_custom README user1@myubuntu:~$ /etc/default/grub 파일 : GRUB 메뉴설정내용이저장 user1@myubuntu:~$ more /etc/default/grub # If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n 'Simple configuration' GRUB_DEFAULT=0 #GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=10 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="" ( 생략 )
05 부트로더 단일사용자모드로부팅하기 1 시스템재시작하기 : 부팅할때 GRUB 메뉴초기화면이출력 [ 그림 8-9] GRUB 메뉴초기화면
05 부트로더 단일사용자모드로부팅하기 2 GRUB 편집모드로전환하기 : GRUB Boot Menu 가출력될때신속하게 e 키를눌러서편집모드로전환 [ 그림 8-10] GRUB 편집화면
05 부트로더 단일사용자모드로부팅하기 3 단일사용자모드로수정하기 리눅스커널정보가있는행에서 ro quiet splash $vt_handoff 를 rw init=/bin/bash 로수정 [ 그림 8-11] 단일사용자모드로부팅하기위해커널항목수정
05 부트로더 단일사용자모드로부팅하기 4 F10 키를눌러재시작하면바로 root 계정으로동작 [ 그림 8-12] root 계정화면
05 부트로더 복구모드로부팅하기 어떤이유에서든우분투가부팅되지않는다면복구모드로부팅하는것이유용 복구모드에서는 root 계정으로로그인하여시스템의복구에필요한작업을수행할수있음 1 시스템을재시작하고 GRUB 메뉴초기화면에서 Advanced options for Ubuntu 를선택 [ 그림 8-13] 복구모드선택화면
05 부트로더 복구모드로부팅하기 2 복구메뉴화면 Ubuntu, 그리고 Linux 3.11.0-12-generic ( 복구모드 ) 를선택하면부팅과정이진행되다가복구메뉴화면이나온다. 이메뉴에서 Drop to root shell prompt 를선택 [ 그림 8-14] 복구메뉴선택화면
05 부트로더 복구모드로부팅하기 3 Drop to root shell prompt 를선택하면 root 프롬프트가출력 [ 그림 8-15] root 프롬프트출력화면
05 부트로더 복구모드로부팅하기 4 root 프롬프트가출력되면복구작업가능 root 파일시스템이읽기전용으로마운트되었으므로읽기, 쓰기가가능하도록다시마운트하고작업 root@myubuntu:~# mount -o remount,rw / 5 작업이완료되면 reboot -f 명령으로리눅스를재시작