본문 바로가기
Linux BSP

[Linux File System] Linux Root File System

by TYB 2024. 2. 19.
반응형

* Root File system은 

부팅시 fstab파일을 실행하고 파일의 코드가 동작하면서 root file system을 mount합니다.

 

pi@pi08:/etc $ vi fstab

 

 

 

ubuntu@ubuntu8:~/pi_bsp/rootfs$ wget https://downloads.raspberrypi.org/NOOBS_latest

 

 

 

ubuntu@ubuntu8:~/pi_bsp/rootfs$ unzip -d noobs NOOBS_latest

ubuntu08@ubuntu08-VirtualBox:~/pi_bsp/rootfs$ du -h -d 1 noobs/
1.3M    noobs/overlays
48K     noobs/defaults
2.8G    noobs/os
2.8G    noobs/


ubuntu@ubuntu8:~/pi_bsp/rootfs$ cd noobs/os/RaspiOS_Full_armhf/
ubuntu@ubuntu8:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf$ mkdir rootfs

ubuntu@ubuntu08:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf$ sudo tar xvfp root.tar.xz -C ./rootfs

 

경로 바꿔주고 계정이랑 암호를 하나 넣어줍시다.

ubuntu@ubuntu08:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf/rootfs/etc$ sudo vi passwd

 

아래 글 보고 확인 됬으면 이제 해석이 되죠?


 

putty 세션하나 복제해서 새로운 유저를 추가해서 어떤 형식으로 생성되는지 확인해보자

확인만 하고 바로 삭제하자~

ubuntu08@ubuntu08-VirtualBox:~$ sudo adduser pi
[sudo] password for ubuntu08:
Adding user `pi' ...
Adding new group `pi' (1002) ...
Adding new user `pi' (1002) with group `pi' ...
Creating home directory `/home/pi' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for pi
Enter the new value, or press ENTER for the default
        Full Name []: wcm
        Room Number []: 01
        Work Phone []: 01
        Home Phone []: 01
        Other []: 01
Is the information correct? [Y/n] y

ubuntu08@ubuntu08-VirtualBox:/etc$ sudo vi passwd

/etc/passwd의 최하단에 추가되어 있음.

 

이제 어떻게 만들어지는지 느낌오죠? 

전체를 보면 이정도

user가 만든 2번째 계정이므로 1002가 된거고 파랑색깔인 추가정보는 있어도 되고 없어도됨.

 

ubuntu08@ubuntu08-VirtualBox:/etc$ sudo vi shadow

최하단으로 내려가면

ubuntu:!:19772:0:99999:7:::
pi:$6$nY1LZWiHgKQzP9zV$YBaUClvB/ulejaIdMExBtsqClg5kwbNhStpsDRmym1yfHDT.x9YLJNHsxCOX2b./9SQhgNuSTnd8I65EJIMDI.:19772:0:99999:7:::

 

shadow안에 있는 내용은 계정마다 다 다름. 계정 만료일자(99999, 만료없음), 


ubuntu08@ubuntu08-VirtualBox:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf/rootfs/etc$ sudo vi shadow

*가 있으면 암호가 없으므로 잠겨있는 상태인거임.

ubuntu08@ubuntu08-VirtualBox:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf/rootfs/etc$ sudo vi passwd

이거도 암호가 없는 상태고

 

그래서 ~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf/rootfs/etc 안에 있는 pi 계정 내용을 shadow랑 passwd에서 삭제하고, 위에서 만든 /etc에 있는 내용을 복사해서 붙여넣어주면 된다.

 

 

라즈베리파이 sd카드 빼서 sd 리더기에 꽂아주고 

 

우분투 가상환경에서 장치-> USB -> sd리더기를 선택해준다.

 

ubuntu08@ubuntu08-VirtualBox:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf$ sudo rm -rf /media/ubuntu08/rootfs/*

ubuntu08@ubuntu08-VirtualBox:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf$ sudo cp -ra rootfs/* /media/ubuntu08/rootfs/.

옵션설명

r: recursive 안에 내용도 복사

a: 원본의 permission을 유지하면서 복사 하는 옵션(이걸 안주면 root가 자기 파일인데 실행할 권한이 없어짐)

 

 

 

 

 

ubuntu08@ubuntu08-VirtualBox:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf$ sudo blkid
[sudo] password for ubuntu08:
/dev/sda5: UUID="7f7bccec-ff5d-4c76-abb5-158bf9f43a4c" TYPE="ext4" PARTUUID="f1c79b29-05"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"
/dev/loop5: TYPE="squashfs"
/dev/loop6: TYPE="squashfs"
/dev/loop7: TYPE="squashfs"
/dev/sda1: UUID="D112-077D" TYPE="vfat" PARTUUID="f1c79b29-01"
/dev/loop8: TYPE="squashfs"
/dev/loop9: TYPE="squashfs"
/dev/loop10: TYPE="squashfs"
/dev/loop11: TYPE="squashfs"
/dev/sdb1: LABEL_FATBOOT="bootfs" LABEL="bootfs" UUID="D735-E67D" TYPE="vfat" PARTUUID="921b283c-01"
/dev/sdb2: LABEL="rootfs" UUID="b69628b0-b5d6-474c-9bed-477305ae01ad" TYPE="ext4" PARTUUID="921b283c-02"

 

sdb1의 PARTUUID를 넣어줘야함.  921b283c-01


sd카드의 uuid값과 다

ubuntu08@ubuntu08-VirtualBox:/media/ubuntu08/bootfs$ sudo vi cmdline.txt

console=serial0,115200 console=ttyS0 root=PARTUUID=921b283c-02 rootfstype=ext4 fsck.repair=yes rootwait
#console=serial0,115200 console=tty1 root=PARTUUID=921b283c-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=GB

 

 

ubuntu08@ubuntu08-VirtualBox:/media/ubuntu08/rootfs$ vi etc/fstab

  1 proc            /proc           proc    defaults          0       0
  2 PARTUUID=33497a23-01  /boot           vfat    defaults,flush    0       2
  3 PARTUUID=33497a23-02  /               ext4    defaults,noatime  0       1
  
  
  
  이 값을 아까 봤던 uuid값으로 변경
  
  
  proc            /proc           proc    defaults          0       0
PARTUUID=921b283c-01  /boot           vfat    defaults,flush    0       2
PARTUUID=921b283c-02 /               ext4    defaults,noatime  0       1


변경하면 요렇게 됨

 

ubuntu08@ubuntu08-VirtualBox:/media/ubuntu08/bootfs$ sudo touch ssh

이 명령어를 쳐주면 라즈베리파이가 부팅할 때 ssh 원격접속이 가능해짐. 이건 라즈비안 os에서 제공하는 기능임.

 

자 다 했으니, 이제 sd카드 빼자

df쳐서 filesystem 명 확인하고

ubuntu08@ubuntu08-VirtualBox:/media/ubuntu08$ sudo umount /dev/sdb*

 

라즈베리파이에 sd카드 꽂아서 부팅해보면 초기 상태로 os 처음 깔 때 install 하는 화면이 나옴.

 

이번 실습의 목적은 기존에 있는 파일을 가져와서 업그레이드 해보는 거였음.

 

 

 


 

 

 

 

끝났으니 다시 user 삭제해주자

 

ubuntu08@ubuntu08-VirtualBox:~$ sudo deluser pi

ubuntu08@ubuntu08-VirtualBox:~$ cd ..

ubuntu08@ubuntu08-VirtualBox:/home$ ls
pi  ubuntu08



ubuntu08@ubuntu08-VirtualBox:/home$ sudo rm -rf pi
ubuntu08@ubuntu08-VirtualBox:/home$ ls
ubuntu08
반응형