home search
OS
Linux
[Linux] Linux Admin (3): 파일 시스템
2022. 02. 25

File System

컴퓨터 시스템은 read, write, evaluate의 작업을 하고, 그 중 메모리가 read, write를 한다. File System(FS)은 메모리 역할 중 일부를 맡는다. FS는 파일을 계층적 구조로 저장하는, 데이터 베이스의 일종이라 볼 수 있다.

FS에는 여러 타입이 있다.

FS type OS 설명
ext4 Linux 리눅스 고유 파일 시스템. ext3, ext2의 업그레이드 버전
xfs Linux 실리콘 그래픽스의 저널링 파일 시스템. RH계열의 기본 파일 시스템
zfs Linux 솔라리스의 기본 파일 시스템. CoW을 실험적 지원
Btrfs Linux 바이너리 트리를 이용해 만들어진 시스템으로, 잘 쓰이진 않음
ntfs Windows Windows NT 계열에서 사용하는 FS
fat32 Windows FAT 32 bit 버전. ntfs 이전에 사용되었으며, 지금은 거의 안 씀
exfat Windows FAT 32 bit의 확장 버전. 카메라에 쓰임
fat16(vfat) Windows Windows 9x 계열

리눅스에서는 ext4와 xfs가 주로 쓰인다.전자는 주로 작은 기기들(IoT, 라즈베리 파이 등)에 사용되고, 후자는 큰 시스템에 주로 사용된다.


새 FS 만들기

순서는 다음과 같다.

  1. 파티션 나누기(Partitioning)
  2. FS 만들고 체크
  3. 마운트 (Mount)

파티션 나누기(Partitioning)

파티션

파티션(Partition)이란, 나뉘어진 구획을 의미한다. 최근에는 physical과 logical 구획 모두를 포함한다. physical partition을 나눌 때는 디스크에 labeling 작업을 해야 한다. disklabel 타입에는 두 가지가 있어, DOS방식(msdos)과 GPT 방식이 있다.

① DOS labeled disk (MBR)

DOS 파티션에는 아래와 같은 종류가 있다.

  • Primary Partition (주 파티션): 한 디스크 당 4개까지만 만들 수 있다.
  • Extended Partition (확장 파티션): 주 파티션이 지원하는 4개 이상의 파티션이 필요할 때 추가적으로 사용할 수 있다. 확장 파티션은 다시 여러 논리 드라이브로 나눌 수 있다.
  • Logical Drive (논리 드라이브): 확장 파티션을 나눌 때 사용한다.

fdisk로 파티션 나누기

루트 권한으로 작동시켜야 한다.

fdisk -l 또는 lsblk

현재 FS 리스트를 출력하는 명령어로, 앞 명령어는 oldfasion이고, 최근에는 lsblk(list block)을 더 많이 사용한다.

‘block device’는 저장 장치를 이르는 말로, 입출력 장치는 ‘character device’라고 한다. 모든 디바이스는 /dev디렉토리 하에 있으며, 이름이 /dev/sd[abcd...]로 이름 앞에 sd가 붙는 경우에는 SCSI 디스크에 해당하여 시리얼 타입으로 작동하는 SATA, USB를 말한다. 디스크의 연결 순서대로 a, b, c, d…로 sd 뒤에 붙는다. 만약 /dev/hd는 IDE 디스크에 해당하여 지금은 쓰지 않는다.

SCSI(=scuzzy) ‘스커지’라고 읽어야 한다. ‘스카시’는 잘못된 발음이다.

fdisk <디바이스>

/dev/sda를 눌러 sda 디스크를 보자. Command에서 m을 눌러보면 아래와 같은 화면이 나온다.

m말고도 다른 명령어를 보자.

명령어 설명
a 부트 활성 플래그 지정(DOS, Windows 계열의 부트 드라이브 지정)
d 파티션 삭제
l 알려진 파티션 ID (파티션 타입). 리눅스에선 다른 OS 파티션도 만들 수 있는데 이때 사용
n 새 파티션 생성
p 현재 파티션 상태 출력
t transition의 약어. 파티션 ID (타입) 변경. 기본은 리눅스 용이며, 다른 OS 용으로 만들려면 여기서 지정
q 변경된 상태 저장 않고 종료. 연습 시에는 w말고 q로 종료하자.
w write의 약어. 변경된 상태 저장 후 종료

아래 사진은 Command에서 p를 입력했을 때다.

아래 사진은 Command에서 d를 입력했을 때다. 파티션 번호를 입력하라고 나오며 default에 해당하는 숫자는 그냥 엔터키만 눌러도 삭제가 수행된다.

주 파티션을 생성해보자.n(new)를 입력하면 e, p 중 하나를 입력하라고 한다. 각각 extended, primary이다. Primary를 선택하고, First Cylinder는 엔터 쳐 기본 값을 선택한다. 기본 값은 가장 작은 값으로 자동 선택되어 있다. 그 다음엔 라스트 실린더 혹은 사이즈를 입력하는데, 사이즈를 넣는 것이 일반적이다. ‘+4000M’ 또는 ‘4G’로 지정한다.

이번엔 확장 파티션을 만들어본다. n → e로 들어간 뒤, 파티션 번호를 입력한다. 확장 파티션의 경우 맨 끝 번호를 주는 것이 관례이므로 4를 입력한다. First Cynlinder와 Last Cynlinder 부분 다 엔터를 입력해 기본 값으로 한다. Last Cynlinder를 기본값으로 하면 남은 전체가 할당된다.

논리 드라이브를 만들어본다.n을 입력하면 이번엔 l도 뜬다. 확장 파티션이 만들어졌기 때문이다. l을 입력해 들어가서 엔터, +8000M를 입력한다.

p로 현재 작업 상황을 확인한다.

다음으로는 논리 드라이브의 파티션 ID 타입을 변경해본다. t → 5 → 82 로 transite, 5번 파티션 지정, 바꿀 타입을 선택한다. 만약 Hex Code에서 L을 누르면 어떤 번호가 어떤 타입인 지 알 수 있는데, 82번은 아래 나온 대로 Linux swap이다.

p로 바뀐 내용을 확인하면 아까 83이었던 값이 82로 바뀐 것을 볼 수 있다.

[사진]

이번엔 다른 타입으로 바꿔보자. t → 5 → 7로 NTFS로 바꾼다.

이젠 나가야 하는데 반드시 저장하지 않고 나가야 한다. 그러니 q를 누른다! qw(저장 후 종료)가 붙어 있으므로 오타의 위험이 있다면 ^C를 눌러 강제 종료 시킨다.(SIGINT 시그널을 보냄)

FS 만들기

FS를 만드는 것(Make FS) 흔히 포맷이라고 부르기도 하나, 올바른 용어는 아니다. 따라서 리눅스에서는 포맷 대신 ‘make file system’라고 불러야 한다.

파일 시스템을 만들어보기 위해 빈 파티션을 만들어두는 사전 작업이 필요하다.

  1. Disk 추가: WMWare 등에서 디스크를 한 개 더 추가하며, 최소 4G 이상으로 한다.
  2. fdisk로 파티션 나누기: 주 파티션 1G 하나, 주 파티션 2G 하나를 만들고 나머지는 빈 공간으로 둔다.

디스크를 추가하는 방법은 아래와 같다.

Setting에서 하드디스크 탭을 들어간다. 하단 [Add]를 눌러 아래처럼 진행한다. 용량의 경우 10G 이상으로 하는 것이 좋으나, 4G 이상으로 해도 된다. 설정이 끝나면 두 번째 디스크가 할당된 것이 보인다.

lsblk로 목록을 다시 확인해본다.

이전 실습처럼 파티션도 각각 만들어준다.

이제 파일 시스템을 만들어보자. 프로그램 이름은 mkfs이다. (포맷 대신 이 용어 쓰기!)

mkfs [t fstype] [options] <device>

mkfs.<fstype> [options] <device>

mkfs는 wrapper이기 때문에 파일 시스템을 무얼 쓰는가에 따라 알아서 해주기도 한다.

# mkfs -t ext4 /dev/sdb2
	→ 우리는 ext4로 만들어본다.

FS를 만들었으면 문제가 있는지 체크해줘야 한다. 프로그램 이름은 fsck(file-system checking)이다.

fsck [-ARNV] [options] [-t fstype] <device>

fsck.<fstype> [-ARNV] [options] <device>

# fsck -y -t ext4 /dev/sdb2
# echo $?

fsck는 파일 시스템의 문제 여부를 종료 코드(return code, rc)로 판단한다. 해당 fsck 프로세스가 끝나고 새 명령을 입력할 수 있게 되면 echo $? 명령으로 그 종료 코드를 확인할 수 있다. $?는 직전 명령어 main() 함수의 리턴값을 불러온다. 리턴 값이 0이면 True, non-zero는 False이다. man fsck를 살펴보면 fsck의 리턴 값은 sum(bit의 합)으로 하는 것을 알 수 있다. 가령 3을 리턴했다면 1+2이므로 에러는 corrected되었으나 reboot는 필요하다는 뜻이다.

swap 공간

파일 시스템에는 swap 이라는 공간이 있다. 이는 메모리가 부족할 때 디스크에 메모리의 일부분을 저장하는 것이다.

swap in/out을 위해 스왑 공간이 필요하며, 램의 최대 2배 공간까지 가능하나 요즘은 RAM의 공간이 크기 때문에 그 정도까지 만들어두진 않는다.

mkswap [-L label] <device>

: 스왑 공간 작성(포맷)

swapon <device | swapfile | -L Label>

: 스왑 공간 활성화(사용). -a 옵션으로 모두 활성화 가능

swapoff <device | swapfile | -L Label>

: 스왑 공간 비활성화. -a 옵션으로 모두 비활성화 가능

/dev/sdb1에 스왑 공간을 만들어보자. 스왑 공간을 만들기 위해서는 타입이 82어야 한다. 따라서 기존의 83이었던 것을 t 명령으로 바꾼다. 그러나 꼭 바꾸지 않아도 스왑 공간을 작성할 수 있다.

# mkswap -L swapfs2 /dev/sdb1
    → 'swapfs2'는 이름(레이블)

또는 임시적 스왑 파일을 만들 용도로 일반 파일을 스왑 공간으로 쓸 수도 있다. dd명령을 사용한다.

# dd if=/dev/zero of=./swapfile1 bs=1024 count=262144
    → 'if' = input file / 'of' = output file / input을 읽어 output을 만듦. 디바이스 전체를 입력하면 디바이스 복제도 가능
    → 'bs' = block size / count = 배수 / bs * count = 용량. 여기서는 256MB

# mkswap ./swapfile1

이젠 활성화를 시키자.

# swapon /dev/sdb1    → 디바이스 이름을 직접 지정하여 활성화
# swapon ./swapfile1    → 스왑 파일을 적을 수도 있음
# swapon -L swapfs2     → 아까 레이블을 지정했다면 이렇게도 선언 가능
결괏값 → sda1이 이미 올라와 있어 그 레이블이 swapfs2라서 중복되어 스왑 불가

스왑 공간을 확인해보자.

# cat /proc/swaps

priority는 ‘-2’가 있는 부분이 가장 높다. swap을 추가한 순서대로 -2부터 하나씩 내려간다.

스왑을 끌 때는 swapoff <디바이스>하거나 swapoff -a로 모두 끌 수 있다.

fstab에 등록된 스왑 공간을 확인하려면 grep 명령어를 쓸 수 있다. 해당 파일에서 swap이란 문자가 들어간 부분을 모두 추출한다.

# grep swap /etc/fstab

mount

파일 시스템을 사용하기 위해 해당 파일 시스템을 적재(탑재)하는 과정이 mount이다. 기존 파일 시스템에 새로운 파일 시스템이 올라간다고 해서 붙여진 이름이다. 마운트를 자동으로 하기 위해 사용되는 설정 파일이 /etc/fstab이다. (‘tab’은 주로 ‘table’의 약자이다.) 마운트 시, 보통 루트 디렉토리(/)를 기점으로 시작되어 모든 파일 시스템을 응집성 있게 묶어주려 하므로, 루트 디렉토리가 먼저 마운트되어 있어야 한다.

사용되는 명령어는 mount(마운트 하기), umount(‘un’mount가 아님에 주의)(언마운트), findmnt(마운트 리스트 확인)

[사진]

위 사진 처럼 usr를 루트 디렉토리로 하여 붙게 된다. 이렇게 루트 디렉토리를 기점으로 붙게 되면 만약 usr의 용량이 다 찼다고 하더라도 시스템 전체엔 문제가 없다는 장점이 있다. 그러나 루트 디렉토리에 모두 붙이는 것은 실습을 할 때이고, 실전에서는 다른 디렉토리를 다른 파티션으로 나눠 놓고 따로 붙여 각자가 영향을 주지 못하게 한다.

mount

시스템의 현재 마운트 상태를 보는 것을 ‘마운트 테이블을 본다’고 한다. 옵션 없이 mount 명령어를 실행하면 마운트 테이블을 볼 수 있다.

하지만 보기 불편하여 findmnt 명령어를 대신 사용하는 것이 좋다.

mount [-t fstype] [-o option] [device] <directory>

FS 타입(fstype) 부분은 생략하는 경우가 많다. 자동 판단해주기 때문이다. ‘device’는 마운트할 장치, directory는 그 장치를 어느 디렉토리에 붙일 것인지(마운트 대상 지점, mount point)를 지정한다.

umount <directory | device>

언마운트 할 때는 디렉토리든 디바이스든 아무거나 지정하면 된다. 어차피 둘이 붙어있기 때문이다.

/dev/disk 디렉터리를 확인해보자.각 디렉터리에 어떤 형식으로 심볼릭 링크가 만들어져 있는지 확인할 수도 있다.

# ls /dev/disk
# ls -l /dev/disk/by-id/
# ls -l /dev/disk/by-path/
# ls -l /dev/disk/by-uuid/

실제로 마운트를 실습해보자. 앞서 sdb를 추가하고 파티션을 나누는 작업을 했다. sdb1은 swap으로 사용했으므로 sdb2를 사용할 것이다.

  1. mkfs -t ext4 /dev/sdb2 : 파일 시스템 만들기
  2. mkdir /media/backup : 마운트할 위치 만들기
  3. mount -t ext4 /dev/sdb2 /media/backup : -t ext4는 생략 가능. 마운트하기

마운트가 끝나고 lsblksdb2를 하면 만든 것이 보인다.

ls -l /media/backup을 해보면 ‘lost+fount’가 있는데 여기는 파일이 깨지는 등의 일을 위해 저장되는 위치이다.

파일을 한 번 기록해보자. 압축 명령어를 써본다.

# tar cfa /media/backup/etc_backup.tar.gz /etc
    → c(create), f(파일명 지정), a(auto, 파일명 따라 자동으로 압축 방법(?) 지정)
    → /etc의 것들이 앞 파일명으로 저장
# ls -l /media/backup

이번엔 언마운트를 해본다. 그냥 해봐도 되지만 일부러 에러를 발생시키고 언마운트 해보자.

# lsblk
# cd /media/backup → 마운트 위치로 이동
# umount /media/backup

사진에서도 볼 수 있듯, 해당 타겟이 busy라고 한다. 이는 현재 작업중인 위치가 바로 언마운트 시키려는 위치와 동일하여 이미 그곳이 실행중인 프로세스이기 때문이다. USB를 안전 제거할 때도 ‘사용 중이다’고 뜨는 것과 같은 논리이다. 따라서 작동 중인 프로세스를 찾기 위해 fuser <dir\>로 PID를 찾아내 종료시킨다.

Device is busy

마운트한 파일 시스템에서 프로세스가 실행중일 경우 발생하는 문제이다. fuser로 실행중인 프로세스를 체크하고 종료한 뒤 마운트를 해제해야 한다.
fuser -c <경로>

해당 파일 시스템 아래에서 작동하는 프로세스 체크. PID 값을 알려준다. ⭐ fuser -ck <경로>

체크하고 종료까지

# cd ..
# umount /media/backup → /dev/sdb2로 해도 된다
# lsblk
# ls /media/backup → 아무것도 없을 것임

언마운트 된 공간에 빈 파일을 하나 만든 뒤, 다시 마운트 시켜보자.

# touch /media/backup/hey_there.txt
# ls /media/backup → 새로 만든 빈 파일만 보일 것
# mount /dev/sdb2 /media/backup → 다시 마운트
# ls <Alt-.>

hey_there.txt가 안 보인다. 마운트는 올라타는 것이므로 기존 디렉토리 내용은 안보인다. 사라지는 건 아니다.

mount의 옵션을 더 살펴보자.

mount -o ro <디바이스> <디렉터리>

ro(read only) 옵션은 읽기 전용으로 읽는 것이다.

# findmnt   → 마운트 되어 있는 것을 볼 수 있으며, 옵션 3개가 설정되어 있음을 볼 수 있다. 옵션 rw를 ro로 바꿔볼 것이다.
# umount /dev/sdb2
# mount -o ro /dev/sdb2 /media/backup
# findmnt   → 옵션이 바뀌어 있다.

mount -o remount <디바이스>

umount, mount를 연달아 하던 것을 번에 처리할 수 있다. 복구모드로 바꿀 때, 설정만 바꿀 때 이런 간단한 방식을 사용한다. 다시 rw로 옵션을 바꿔본다.

# mount -o remount,rw /dev/sdb2

이번에는 USB 메모리 card나 stick로 직접 마운트를 해본다.

USB 메모리를 장착하면 장치명을 확인해야 한다. 시스템에 현재 몇 개가 있는지 모르기 때문이다. 따라서 lsblk로 장치명을 먼저 확인한다.

sda, sdb까지 있으므로 USB를 꽂으면 sdc로 인식될 것임을 알 수 있다.

그 다음으로는 mount 명령어로 인식시킨다. 이 때 원래는 FS type을 알고 있어야 한다. 보통은 fat32이긴 하다. 대체적으로는 자동 판별이 되는데 안될 경우 FS type을 알아내 mount 명령으로 인식시켜야 한다.

VMware인 경우 USB 장치를 2.x인지 3.x인지에 따라 다르게 나타난다. 가상머신을 Offline으로 하고 아래와 같이 Virtual Machine Settings - USB Controller - USB compatibility에 가면 버전을 선택할 수 있다. 참고로 3.0, 3.1, 3.2는 같다.

X window 환경에서는 USB가 자동 마운트되므로 실습을 위해 이를 사용하지 않는 환경으로 나가야 한다. Ctrl-Alt-F3을 눌러 콘솔(tty3)로 이동한 뒤 USB를 연결하면 VMware 팝업창이 뜬다. 꽂은 USB를 호스트가 쓸 것인기 가상머신이 쓸 것인지 선택하기 위해서이다. 여기서 ‘Conect to a virtual machine’을 선택한다.

X window가 아닌 콘솔 창의 경우, VMware의 Gest OS에서 Host OS로 돌아오려면 Ctrl-Alt를 누르고, Gest로 돌아가려면 화면을 한 번 클릭하면 된다.

Ctrl-Alt-F3을 눌러 콘솔(tty3)로 이동했다면, root로 로그인한 뒤 lsblk로 확인한다. 아래처럼 USB 메모리가 연결된 상태로 나온다. (sdc)

아직 마운트는 되지 않았으므로 ‘part’ 뒤에 아무 것도 적혀있지 않다.

이제 마운트를 해보자.

# mkdir /media/usbstick  → 마운트 위치 지정
# mount /dev/sdc1 /media/usbstick
# lsblk

blkid <디바이스>

block id의 약어로, 특정 디바이스를 더 자세히 보기 위한 명령어이다. 레이블, UUID , type 등을 볼 수 있다.

# blkid /dev/sdc1
# blkid /dev/sda1

이번엔 USB에 데이터를 쓰고 umount 시켜본다. umount하지 않고 메모리를 뽑으면 안된다.

# cp ~/.bashrc /media/usbstick
# umount /dev/sdc1

그 뒤에 USB를 VMware에서 disconnect 시키자. USB 장치는 호스트나 VMware 둘 중 하나에서만 쓸 수 있으므로, 호스트가 쓰던 것을 가상 머신으로 쓰려면 VMware 우측 상단 USB 아이콘 - 우클릭 - connect를 하고, 반대의 경우에는 disconnect를 누른다.

이젠 호스트 컴퓨터에서 해당 파일을 열어볼 수 있다.

directory binding

mount 기능 중 자주 쓰이는 것으로, 디렉터리를 다른 위치의 디렉터리에 붙이는 기능이다. 지금까지는 디바이스를 디렉터리에 붙였는데, 한 디렉터리를 다른 디렉터리에 붙이는 것이다.

mount –bind <src 디렉터리> <dest 디렉터리>

mount--bind옵션으로 구현한다. 디렉터리1을 디렉터리2에 마운트한다.

eject

외부 저장 장치를 뺄 때 쓰는 명령어이다. 언마운트 뒤 CD나 DVD를 뽑을 때 쓴다.


fstab

개요

fstab은 /etc/fstab에 위치한 파일로, 부팅 시 파일 시스템을 읽어와 자동 마운트하기 위한 정보를 담고 있다. ‘file system table’의 약자이다. 따라서 해당 파일의 설정이 잘못될 경우 부팅이 멈출 수 있다.

mount할 device 장치는 세 가지 방식이 존재한다.

  • /dev/sd*처럼 실제 디바이스 장치로 설정하는 방식: 시리얼 디바이스는 포트를 순서대로 연결하지 않는 경우 장치명 변경, 역전 위험성이 있다.
  • LABEL=name처럼 레이블 이름으로 검색해 장치 찾아내는 방식: 레이블은 ‘myDisk2’처럼 식별 가능한 문자열이다. 부팅 시 해당 레이블을 찾는다.
  • UUID=uuid처럼 UUID 값을 FS 레이블 부분에 넣어 검색해 장치 찾는 방식: 랜덤하게 만드는 해시코드처럼 설치 시 생성한다. 설치하는 프로그램마다 다른 값이 붙여지므로 디스크를 다른 장치에 이식해도 문제가 일어나지 않는다. 나중에 변경도 가능한 값이다.

파일 시스템의 주요 옵션을 알아보자. 이는 mount의 옵션과 동일하다.

옵션 설명
dfaults 기본 값 사용. 부팅 시 자동으로 마운트
noauto no auto. 부팅 시 자동으로 마운트하지 않음
rw read write, 읽기 & 쓰기 허용
ro read only
user 일반 유저도 마운트 가능
nouser 일반 유저는 마운트 불가. super user만 가능
noexec 실행파일 사용 금지

현재 시스템들은 systemd를 쓴다. systemd가 사용되며, *.mount를 관리하는 target이 따로 있다. tstab은 다시 해석되어 읽어진다(unit화된다).

Label, UUID 변경

ext4에서 Label, UUID의 변경에 쓰이는 유틸리티에는 아래와 같은 것들이 있다.

🍎 e2label <디바이스> [새 라벨] 혹은 tune2fs -U uuid_value <디바이스>

위 두 개는 주로 설정에 쓰인다.

🍎 findfs LABEL=라벨 혹은 findfs UUID=uuid

위 두 개는 주로 query에 쓰인다.

  • e2label: ext4 리눅스 파일 시스템의 레이블을 확인하고 편집한다.
  • tune2fs: ext4 파일 시스템의 다양한 설정을 조절한다.
  • xfs_admin: XFS 파일 시스템을 사용할 경우 UUID와 레이블을 확인하고 편집한다.
  • findfs: 레이블을 검색한다.

🍎 tune2fs -U <clear|random|time|UUID_value>

해당 명령어를 더 자세히 보자면, random이나 time을 이용해 UUID를 생성하는 것이 보편적이다. 직접 넣을 수도 있다.

🍎 uuidgen

UUID를 생성하는 유틸리티이다. 또는 이 명령어 대신 /proc/sys/kernel/random을 읽어도 된다.

fstab 등록

이젠 직접 fstab을 앞서 본 방식들로 실습해본다.

① 실제 디바이스 장치로 설정하기

이전 파일 시스템 포스팅에서 만들어둔 sdb2를 fstab에 등록하여 부팅 시 자동 마운트되도록 해보려 한다.

fstab을 수정할 때는 오타로 인해 부팅 시 멈춰버릴 수 있기 때문에 주의해 실습해야 한다.

먼저 vi로 /etc/fstab을 열고 아래 내용을 추가한다. /media/backup 디렉터리는 사전에 만들어져 있어야 한다.

/dev/sdb2	/media/backup	et4	noauto	0	2

옵션을 noauto로 했으니 자동으로 마운트하여 부팅이 멈추는 일이 발생하지 않을 것이다.

이후 mount /media/backup 명령을 해본다. 다음에는 findmnt로 mount table을 확인한다. umount도 해본다.

그러나 앞서 보았듯이, 실무에서는 이 방식은 장치 이름이 밀리거나 변경되는 일이 발생할 수 있으므로 LABEL이나 UUID 방식을 사용한다.

② LABEL로 설정하기

요즘은 레이블 방식보다는 UUID 방식이 많이 사용되므로 간단히만 하고 넘어간다.

ext4의 경우이다.

# e2label /dev/sdb2 → 아무것도 안 나오면 없는 것이므로 새로 할당한다.
# e2label /dev/sdb2 mybackup
# blkid <ALT-.>*2 → 라벨 mybackup이 있는지 확인한다.

e2labeltune2fs -L로도 할 수 있다.

아까처럼 /etc/fstab을 vi로 열어 수정해 등록한다. 수정 후에는 mount, umount 명령어로 잘 되었는지 확인해야 한다.

LABEL=mybackup	/media/backup	et4	noautom,noexec	0	2

③ UUID로 설정하기

먼저 tune2fs로 UUID를 새로 설정한다.

# blkid /dev/sdb2	→ 기존 UUID 확인
# tune2fs -U random /dev/sdb2
	→ tune2fs -U $(uuidgen) /dev/sdb2 명령도 가능하다
    → UUID를 랜덤으로 생성한다.
# blkid /dev/sdb2	→ UUID 값을 복사한다.

다음으론 /etc/fstab을 수정해 등록한다. 아까 복사한 UUID를 붙여넣는다.

UUID=~~~ /media/backup	ext4	noauto,noexec,lazytime	0	2

수정 후에는 mount /media/backup, umount /media/backup 명령어로 잘 되었는지 확인해야 한다.


udisksctl

udisks2

udisks2는 D-bus 기반의 block device manager로, daemon service로 작동한다. 다양한 HDD, USB 등 다양한 블럭 디바이스를 관리할 수 있다. udisksctl CLI 제공하며, 일반 유저로 명령할 수 있어 오히려 sudo로 명령하면 안된다.

이를 작동해보기 위해 우선 시스템에 서비스가 설치되어 있는지 확인해야 한다. systemd의 unit에 ‘udisks2.service’로 이름지어져 있다. Ctrl-Alt-F3로 콘솔로 가서 다음의 명령을 해본다.

$ systemctl status udisks2	→systemctl은 서비스를 조회하는 기능을 한다.

‘Loaded’라고 되어 있으면 시스템에 설치가 된 것이다. udisks2 daemon이 ‘inactive’ 상태이더라도, udisksctl 사용 시에 자동으로 ‘active’ (start)되므로 상관이 없다. 콘솔이 아닌 X window에서 사용할 때는 ‘active’일 가능성이 높다. 기본은 disable이나, X window를 로그인 할 때, GNOME 환경(X window의 환경)이 자동으로 시작시키기 때문이다.(자동으로 마운트가 되어 있음)

udisksctl

명령어 자동 완성 기능을 지원하므로 더블 탭으로 수행할 수 있는 명령들을, 탭으로 자동 완성을 할 수 있다.

① USB 마운트/언마운트</ span> 해당 명령어를 이용해 USB 메모리를 마운트시켜보자. 먼저, 콘솔에서 장치 목록을 확인해본다.

X window에서 작업할 시 자동으로 마운트된다. 콘솔에서는 자동으로 일어나지 않는다. 따라서 실습은 콘솔에서 진행한다.

$ lsblk

이전 실습에서 sda(기존 디스크), sdb로 만들어두었으므로, 새 장치를 연결하면 sdc로 뜬다. 마운트시키기 위해 아래 명령을 수행하고 다시 목록을 조회한다.

$ udisksctl mount --block-device /dev/sdc1
	→ --block-device 대신 -b를 써도 같다

$ lsblk
	→ USB 뒤에 mount 표시, 레이블 이름이 나타난다.

이번엔 언마운트 시켜본다.

$ udiskctl unmount --block-device /dev/sdc1
$ lsblk

② loop-step

udisksctl로 loopback 디바이스(파일을 디바이스로 쓸 수 있게 한 것. ISO DVD image를 마운트하는 것이 그 예다)를 설정할 수도 있다.

loobback 디바이스는 읽기전용이다. 언마운트는 일반 디바이스처럼 할 수 있다.

$ udiskctl unmount --b /dev/loop0p1
$ lsblk

③ dump 및 info

dump 명령을 통해 디바이스들을 살펴볼 수 있으며, info 명령으로 개별 장치의 정보를 볼 수 있다.

④ status

status 명령으로 어떤 디스크가 어디에 맵핑되었는지 알 수 있다.

$ udisksctl status

이전에 본 바와 같이 mount 명령어를 쓸 수도 있으나, 외장 디스크를 마운트할 때는 udisksctl을 더 많이 쓰는 추세이다.


proc file system

개요

/proc은 process information pseudo-filesystem의 약어로, 프로세스 정보를 가지고 있는 ‘FS인 척하는 가짜’ 파일 시스템이다. 진짜로 존재하지 않고, 메모리에 존재하며 부팅 시 자동으로 만들어진다. 프로세스 관련 정보, 현재 작동중인 시스템 하드웨어 및 커널 등의 정보도 가지고 있다.

그 정보들 중 PCB(Process Control Block)이라는 정보는 프로세스를 관리하는 메타 정보로, 프로세스를 이해하고 관리 및 추적하기 위해 중요한 개념이다.

arrow_upward arrow_downward
loading