Search
🏫

[Unix 시스템] 7. 파일 시스템 관리

Tags
CS
Linux
Last edited time
2024/12/07 06:58
2 more properties
Search
[Unix 시스템] 8. 프로세스 관리
CS
Linux
2024/12/03 12:59
[Unix 시스템] 8. 프로세스 관리
CS
Linux
2024/12/03 12:59

1. 마운트와 언마운트

1.1. 마운트

저장장치에 있는 파일 시스템을 전체 디렉터리 구조에서 특정 디렉터리에 연결하는 것
저장장치에 파티션이 존재하며, 파티션에 파일 시스템을 만들어져 있음
마운트되는 위치를 마운트 지점이라고 함

1.2. 마운트와 /etc/fstab 파일

etc/fstab 파일
filesystem table
리눅스 시스템이 부팅될 때 자동으로 마운트할 파일 시스템의 목록을 가진 설정 파일
각 라인마다 개별 파일 시스템의 마운트 정보가 기록되어 있음
라인을 구성하는 항목의 의미
필드
내용
디바이스
장치의 이름으로 디바이스 파일(예를 들어 /dev/sda1) 또는 UUID(universally unique identifier)가 사용됨
마운트 지점
파일 시스템 트리에서 디바이스가 부착되는 위치(디렉터리)
파일 시스템 유형
리눅스에서 허용하는 파일 시스템의 유형
옵션
마운트 옵션으로 mount 명령에서 -o 옵션을 사용하는 것과 의미가 같음
덤프 여부
백업을 위한 것으로 0은 덤프를 하지 말라는 것이며, 1은 하라는 것
파일 시스템 검사 여부
파일 시스템 검사를 위한 것으로 0은 검사를 하지 말라는 것이며, 루트(/) 파일 시스템의 경우는 1일 때, 나머지 파일 시스템의 경우에는 2일 때 검사를 함
예시
$ cat /etc/fstab <중간 생략> /dev/mapper/rl-root / xfs defaults 0 0 UUID=51e9a7a4-3203-4112-8 /boot xfs defaults 0 0 /dev/mapper/rl-swap none swap defaults 0 0
Bash
복사
마운트와 /etc/fstab 파일
UUID는 파일 시스템을 유일하게 구분하는 숫자(32자리 16진수)
블록 디바이스의 정보를 보여주는 blkid 명령 또는 lsblk -f 명령으로 확인할 수 있음
마운트 또는 언마운트를 하면 내용이 /etc/mtab 파일에 기록됨
옵션 없이 단순히 mount 명령을 사용하면 현재 마운트되어 있는 파일 시스템을 보여줌
기본 마운트 옵션(defaults)은 rw, suid, dev, exec, auto, nouser, async가 적용됨
mount 명령에서 옵션 -o를 사용할 때 적용할 수 있음

1.3. mount 명령

mount 명령
파일 시스템을 마운트하는 명령
파일 시스템을 지정된 디렉터리(마운트 지점)에 붙여 파일 시스템을 사용할 수 있게 함
mount -a [options] [-t type]
옵션 a: /etc/fstab 파일에 기록된 모든 파일 시스템을 마운트 함
옵션 t: 추가되면 해당 유형의 파일 시스템만 마운트 함
mount [options] [-o mount_options] device directory
a가 사용되지 않으면 지정된 장치(또는 디렉터리)에 해당하는 것을 찾아 마운트 함
옵션 o: 파일 시스템을 마운트 할 때 사용할 옵션
예시)
mount -a -t iso9660/etc/fstab에 나열된 iso9660 유형의 모든 파일 시스템을 마운트
mount /dev/cdrom 또는 mount /mnt/cdrom장치명 또는 마운트 포인트만 명시되면 /etc/fstab에서 해당 파일 시스템을 찾아 마운트
다음은 /etc/fstab 파일과 무관한 일반적 마운트 방법임
mount [options] [-t type] [-o mount_options] device directory
mount 명령을 실행하기 전에 마운트 지점(디렉터리)를 생성해야 함
해당 장치가 존재하는지, 파일 시스템 유형이 맞는지 확인함
존재한다면 /etc/fstab 파일에서 해당 파티션에 지정된 옵션을 적용하고, 옵션 o에서 주어진 것을 적용하며, 사용되었다면 r 또는 w를 적용함
예시)
mount -t ext4 /dev/sdb1 /mnt/data1
mount -t iso9660 -o ro /dev/sr0 /media/cd
mount -t vfat /dev/hda3 /mnt/win98

1.4. unmount 명령

디렉터리에 마운트 되어 있는 저장 장치를 해당 디렉터리로부터 분리
umount -a [-nv] [-t ]
umount [-nv] device directory
예시)
umount -a -t iso9660
/etc/mtab에서 iso9660 유형의 파일 시스템을 모두 언마운트
umount /dev/sr0
umount /media/usb

2. 파티션 관리

2.1. 파티션

물리적 저장 장치를 논리적으로 분할한 고정 크기의 구역
하나의 하드디스크에 여러 개의 파티션을 만들 수 있음
파티션은 자신만의 디바이스 파일을 가짐
하나의 파티션을 독립적 저장 장치처럼 사용할 수 있음
예:
첫 번째 SCSI 디스크는 /dev/sda
첫 번째 파티션은 /dev/sda1, 두 번째 파티션은 /dev/sda2...
전통적 ‘MBR 유형 파티션 테이블’은 4개의 primary 파티션을 저장할 수 있음

2.2. 디스크를 여러 파티션으로 분할하여 사용하는 이유

멀티 부팅을 위해 여러 운영체제를 별도의 파티션에 설치함
특정 파티션이 손상되더라도 다른 파티션의 데이터는 보존됨
파티션 별로 다른 파일 시스템을 만들 수 있음
/boot 영역을 별도의 파티션으로 분리하여 빠르게 부팅함
/var 영역을 별도의 파티션으로 만들어 루트(/) 영역의 가용 공간이 줄어드는 문제를 방지함
가상 메모리로 사용될 스왑 영역을 별도의 파티션으로 구성함

2.3. 파티션 관리 도구

파티션과 파티션 테이블을 관리하는 프로그램
‘MBR 유형 파티션 테이블’은 파티션의 최대 크기에 제약이 있음
최근 운영체제는 ‘GPT 유형’의 파티션 테이블을 지원함
파티션의 생성, 삭제, 이동, 크기 변경 및 복사 기능을 제공
파일 시스템을 관리할 때는 다른 도구를 사용하는 것이 좋음
종류
fdisk: 전통적 텍스트 기반 대화식 도구로 GPT는 지원하지 않음
parted: MBR과 GPT를 모두 지원
gdisk: GPT를 지원하며, gpartedparted의 그래픽 버전
parted -l 또는 fdisk -l 명령은 모든 블록 디바이스에서 파티션 정보를 보여줌
parted /dev/sda를 수행한 후 서브 명령으로 p를 실행할 수 있음
# parted -l 모델: ATA VMware Virtual (scsi) /dev/sda 디스크: 42.9GB 섹터 크기(논리/실제): 512B/512B 분할 영역 테이블: msdos 디스크 플래그: 번호 시작 끝 크기 형식 파일 시스템 플래그 1 1049kB 1075MB 1074MB primary xfs boot 2 1075MB 42.9GB 41.9GB primary lvm # fdisk -l | grep /dev/sda Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors /dev/sda1 * 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 83886079 81786880 39G 8e Linux LVM
Shell
복사

2.4. 파티션 만들기

저장 장치를 실제로 사용하려면 파티션을 만들고, 파일 시스템을 만들어 주어야 함
parted 또는 fdisk 명령을 사용하여 파티션을 만들 수 있음
이어서 mkfs 명령으로 파일 시스템을 만듦
연습을 위해 다음 방법을 사용함
가상 머신에 하드디스크를 추가
VMware 메인 창에서 [Edit virtual machine settings] > 설정 창에서 [Add] > 하드웨어 타입에서 [Hard Disk] > [Next]를 실행
또는 가상 머신에 USB 메모리를 장착
가상 머신 메뉴에서 마운트할 수 있음
저장 장치의 이름을 알아 보기 위해 다음 명령어 사용 가능
ls /dev/sd*, parted -l, 또는 tail -f /var/log/messages
# umount /dev/sdb1 umount: /dev/sdb1: not mounted # parted /dev/sdb GNU Parted 3.5 /dev/sdb 사용을 환영합니다! 명령 목록을 보려면 'help'를 입력하십시오. (parted) p 모델: Generic Flash Disk (scsi) /dev/sdb: 62.9GB 섹터 크기(논리/실제): 512B/512B 분할 영역 테이블: msdos 디스크 플래그: 번호 시작 끝 크기 형식 파일 시스템 플래그 1 65.5kB 62.9GB 62.9GB primary fat32 (parted) mkpart primary 0% 8GB (parted) mkpart primary 16GB 100% (parted) p 모델: Generic Flash Disk (scsi) /dev/sdb: 62.9GB 섹터 크기(논리/실제): 512B/512B 분할 영역 테이블: msdos 디스크 플래그: 번호 시작 끝 크기 형식 파일 시스템 플래그 1 1049kB 8000MB 7999MB primary 2 16.0GB 62.9GB 46.9GB primary
Shell
복사

3. 볼륨 관리

3.1. 볼륨

볼륨은 크기가 재조정될 수 있는 파티션
디스크 관리 또는 파티션 관리를 위해 새롭게 등장한 개념
볼륨의 크기를 줄이거나 늘릴 수 있음
여러 디스크를 합쳐 하나의 볼륨을 만들 수 있음
용어
물리 볼륨(PV): 하나의 물리적 디스크
볼륨 그룹(VG): 여러 물리 볼륨을 하나로 묶은 것으로 가상의 하드디스크
논리 볼륨(LV): 볼륨 그룹에서 가용한 공간을 분할한 것으로, 개념적으로 기존 파티션과 일치함
물리 볼륨은 물리 익스텐트(PE)로 나누어져 있으며, 논리 볼륨은 LE로 나누어짐

3.2. 논리 볼륨 만들기

1.
하드디스크에서 파티션을 만듦
2.
하드디스크의 파티션을 물리 볼륨(PV)으로 만듦
3.
하나 이상의 물리 볼륨(PV)을 묶어서 볼륨 그룹(VG)을 만듦
4.
볼륨 그룹(VG) 안에서 논리 볼륨(LV)을 생성
5.
논리 볼륨(LV)에 파일 시스템을 생성하고 마운트하여 사용

3.3. LVM 유틸리티

볼륨 관리 도구
여러 저장 장치에 각각 물리 볼륨을 만들고, 이것을 합쳐 볼륨 그룹(저장 장치 풀)을 구축
볼륨 그룹을 여러 논리 볼륨들로 나누어 사용
LVM 관련 명령
LVM 관련 명령
설명
pvcreate
파티션을 초기화하여 물리 볼륨으로 만듦
pvdisplay
물리 볼륨의 속성을 출력
vgcreate
명령 pvcreate로 만든 블록 디바이스로부터 새로운 볼륨 그룹을 생성
vgextend
기존 볼륨 그룹의 크기를 늘리기 위해 물리 볼륨을 추가
vgdisplay
볼륨 그룹의 속성을 출력
lvcreate
볼륨 그룹에서 새로운 논리 볼륨을 생성
lvdisplay
논리 볼륨의 속성을 출력

3.4. 볼륨 사용 예

2개의 파티션을 각각 물리 볼륨으로 만듦
두 물리 볼륨을 합쳐 볼륨 그룹을 생성
이름과 크기를 주고 논리 볼륨을 만듦
# pvcreate /dev/sdb2 Physical volume "/dev/sdb2" successfully created # pvcreate /dev/sdb3 Physical volume "/dev/sdb3" successfully created # vgcreate testVg /dev/sdb2 /dev/sdb3 Volume group "testVg" successfully created # vgdisplay testVg <생략> # lvcreate -n music -L 8GiB testVg Logical volume "music" created. # lvdisplay /dev/testVg/music --- Logical volume --- LV Path /dev/testVg/music LV Name music VG Name testVg <중간 생략>
Shell
복사

4. 파일 시스템

4.1. 파일 시스템

저장 장치를 디렉터리 구조로 조직화하고 파일에 이름을 부여하는 등의 파일의 저장과 검색을 위한 체계
파일에 파일명과 경로를 부여하여 저장이나 검색을 위해 파일을 구분하고 식별하기 위한 방법을 제공
파일 시스템의 종류에 따라 다음 요소에서 차이가 있음
파일 시스템의 크기, 파일 이름의 길이, 파일의 크기, 파일의 총 개수, 파일의 복구, 성능/보안/유연성 등

4.2. 파일 시스템의 구조

유닉스 계열 운영체제에서 사용하는 파일 시스템의 기본 구성 요소
슈퍼 블록
파일 시스템의 특징을 기록한 블록
블록의 크기, 전체 블록의 개수, inode 테이블의 크기와 위치, 디스크 블록 맵, 첫 번째 데이터 블록의 주소 등
inode 테이블
‘inode 리스트’라고도 함
하나의 inode는 한 개 파일의 이름을 제외한 모든 정보를 가짐
inode 번호, 파일의 형태, 크기, 접근권한, 소유자, 소유 그룹, 수정 시간, 링크 수, 디스크 블록의 위치 등
디렉터리나 특수 파일도 하나의 파일로 간주됨
데이터 블록
일반 파일: 실제 데이터가 저장됨
디렉터리: 포함된 파일의 이름이 inode 번호와 함께 저장됨

4.3. 파일 시스템 유형

커널이 사용하는 가상 파일 시스템과 네트워크 파일 시스템도 있음
파일 시스템
설명
ext4
리눅스 전용 파일 시스템. ext2, ext3의 개선된 버전. 최대 크기: 1EiB, 최대 파일 크기: 16TiB. 저널링을 통한 신뢰성, 온라인 단편화 제거, 하위 호환성 등의 기능 제공
iso9660
CD-ROM과 같은 광학 디스크에 사용되는 표준 파일 시스템
vfat
윈도우 운영체제와 호환되는 파일 시스템으로 USB에서 주로 사용
HFS+
매킨토시에서 사용되는 표준 파일 시스템
Btrfs
리눅스의 차세대 파일 시스템
XFS
고성능으로 대용량 파일을 사용하기 위한 파일 시스템

4.4. mkfs 명령

파티션이나 논리 볼륨에 리눅스 파일 시스템을 만드는 명령
mkfs [-t fs-type] device
옵션 -t fs-type: 파일 시스템의 종류를 지정
device/dev/sdb1 과 같은 파티션의 장치 이름 또는 논리 볼륨의 이름
실제 mkfs 명령은 mkfs.종류이름 을 사용하여 수행됨
코드의 재사용을 높이려는 목적으로 기본은 /sbin/mkfs.ext2
# mkfs -t ext4 /dev/myVg/my_volume mke2fs 1.46.5 (30-Dec-2021) Creating filesystem with 1951744 4k blocks and 488640 inodes Filesystem UUID: efdc2c8c-4339-42f8- 84fc-93c7b55a0c82 <중간 생략> # mkfs -t ext4 /dev/sdc1 <중간 생략>
Shell
복사

4.5. fsck 명령

파일 시스템의 무결성을 검사하고 손상된 파일을 고치는 명령 (filesystem check)
마운트되어 있지 않은 파일 시스템을 검사
문제 발생 시 파일 시스템을 복원
파일 시스템의 ‘lost+found’ 디렉터리에 손상된 파일이 남아 있을 수 있음
fsck [options] device
e2fsck 와 같은 파일 시스템 고유의 검사 프로그램이 존재할 수 있음

4.6. 스왑 영역

특정 파티션이나 파일을 스왑 영역으로 지정하여 사용할 수 있음
메모리 사용량을 확인하는 free 명령으로 스왑 메모리도 알 수 있음
파티션을 스왑 영역으로 사용할 때
빈 파티션을 만듦
mkswap device를 수행하여 스왑 파티션으로 설정
지정한 특정 장치나 파일을 리눅스용 스왑 영역으로 지정
swapon device를 수행하여 활성화
free 명령으로 스왑 영역의 공간을 확인할 수 있음
부팅할 때마다 사용하려면 /etc/fstab 파일에 기록
파일을 스왑 영역으로 사용할 때
교재 참조

4.7. df 명령

마운트 되어 있는 파일 시스템의 공간 사용 정보를 보여 줌
df [options] [names]
인수 names 는 장치 이름 또는 마운트 지점
-h: 용량의 단위를 KB, MB, GB 단위로 보여줌
-T: 파일 시스템의 유형을 포함하여 출력함
-i: inode의 사용량을 보여줌
$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 986M 0 986M 0% /dev/shm tmpfs 395M 9.9M 385M 3% /run /dev/mapper/rl-root 37G 6.9G 31G 19% / /dev/sda1 1014M 390M 625M 39% /boot /dev/sdb1 3.9G 8.0M 3.7G 1% /mnt/data1 <중간 생략>
Shell
복사

4.8. du 명령

디렉터리(또는 특정 파일)의 디스크 사용량을 표시하는 명령 (disk usage)
du [options] [directories]
인수 directories: 특정 파일 또는 디렉터리
기본적으로 하위 디렉터리를 포함하고 1KiB 단위로 출력
옵션
-a: 디렉터리 외에 파일의 디스크 사용량도 출력
-s: 주어진 디렉터리 또는 파일만의 총 사용량을 요약하여 출력
예)
단순 du 명령은 현재 디렉터리와 모든 하위 디렉터리의 사용량을 표시
du --max-depth=1 /home: 사용자 별로 디스크 사용량을 표시