00 개요
01 리눅스 파일 시스템 종류
02 리눅스 파일 시스템 구조
03 파일 시스템 마운트
04 디스크 추가 설치
05 디스크 관리
연습문제
- 20G 디스크 하나가 여러개의 파티션으로 나누어져 있음
- 각 파티션에는 루트 디렉토리 부터 진행되는 게층 구조가 만들어져 있을것이다.
- 10G 파티션(1번)의 루트부터 쭉 이어지는 계층상의 맨 끝에 2번 피티션을 붙이는 이런 매핑은 마운트라는 개념이다.
- LVM : 작은 디스크들을 모아서 가상의 큰 디스크를 만드는 방법




중요한것은 슈퍼블록, inode 블록, 데이터 블록으로 구성이 된다.


/etc/fstab
/etc/fstab 파일 예어느 디렉토리에 마운팅이 되는지, 요 장치가 어떤 파일시스템으로 포맷이 되는지
# 예제
cat /etc/fstab
# 결과
UUID=265c8913-ee1e-4034-885f-207969b0a23b / ext4 errors=remount-ro 0 1
# macOS
/dev/disk/by-uuid/51d6c0e5-9ab3-4a97-b3d3-c5710355d553 /boot ext4 defaults 0 1
파일 시스템의 마운트 옵션

<-- 파일 시스템을 마운트 한다 -->
# mount [옵션] [장치명 마운트 포인트]
mount # 단독 사용 : 현재 마운트되어 있는 정보 출력 (/etc/mtab 파일의 내용과 동일)
# [출력 결과]
# proc on /proc type proc (rw, nosuid, nodev, noexec, relatime)
cat /etc/mtab
# [출력 결과]
# proc /proc proc rw,nosuid, nodev, noexec, relatime 0 0
# 장치명, 마운트 포인트, 파일 시스템 종류, 옵션, 사용하지 않는 항목 두개 (0 0)
mount /dev/sdb1 /mnt # 파일 시스템을 마운트 하기
# /dev/sda -> /dev/sdb -> /dev/sdc 이런식으로 마운트가 된다.
# /dev/sda 에서 파티션이 나누어 지면 sda1, sda2, sda3 등으로 나누어 각 파티션에 파일 시스템을 만들 수 있다.
# 1 숫자의 의미 : sdb1 은 그 나누어진 파일 시스템을 의미한다.
# 옵션 t : 파일 시스템의 종류를 지정
mount -t ex2 /dev/sdb1 /mnt # ext2 로 포맷하여 /dev/sdb1 를 /mnt 에다가 마운트 시키겠다.
mount -t iso9660 dev/cdrom mnt/cdrom
# mnt/cdrom 이라는 디렉토리는 자동으로 만들어주지 않고 관리자가 만들어야함.

# 1) USB 메모리를 리눅스 시스템에 인식시키기
# - mount 명령을 실행해보면 장치가 추가되었는지 확인하고 마운트 해제
mount
umount /dev/sdb1
# 2) USB 메모리의 장치명 확인하기 : sudo fdish -l
# 3) USB 메모리에 파티션 생성하기
# 파티션 만들어야 sda1 sdb1 이렇게 나누지게 된다
# 디폴트는 전체를 하나의 볼륨으로 만들겠다는 옵션
sudo fdisk /dev/sdb
Command (m for help): n
p
w
# 4) 생성한 파티션 포맷하고 파일 시스템 생성하기
# 파티션을 만들었으니까 어떤 식으로 포맷할 것인가
mke2fs -t ext4 /dev/sdb1 # -> ext4 로 포맷
# 5) USB 파일 시스템 마운트 하기
# /deb/sdb1 를 /mnt 에 마운트
sudo mount /dev/sdb1 /mnt
# 6) 디렉토리 사용하기
cd /mnt
cp /etc/hosts .
# <-- 장치 연결 해제 하기 파일 : 시스템을 언마운트 한다. -->
# umount [옵션] [장치명 또는 마운트 포인트]
# 7) 장치 연결 해제 하기 : umount
umount /mnt
cd
sudo umount /mnt
#마운트 해제가 안되는 경우
# 누군가가 그 device 를 사용하고 있으면 mount 해제가 안됨,
# cd 로 나와서 umount 해야함
# 1) USB 메모리를 USB 슬롯에 꽂고 리눅스 시스템에 인식시키기
# 2) USB 메모리의 장치명을 확인 fdisk -l
sudo fdisk -l
#[실행 결과]
FAT32(vfat)
# 3) usb 메모리를 마운트
sudo mount -t vfat /dev/sdb1 /mnt
mount
# 4) USB 메모리가 디렉토리에 연결되어있으므로 사용 가능
# 윈도우에서 이미 포맷을 해서 데이터가 저장되어있는 파일이 있다고 가정
# 그 파일을 usb 를 꽂는다면
# uub 메모리가 디렉토리에 연결되었으므로 사용가능
# 5) USB 메모리를 사용하고 나면 umount 명령으로 마운트를 해제
# 1) CD-ROM/DVD 장치를 연결하여 리눅스 시스템에 인식시킴
# - 대부분의 경우 CD-ROM/DVD 는 자동으로 인식
# 2) 수동으로 CD-ROM/DVD 를 마운트할 경우 장치명은 /dev/cdrom 이나 /dev/sr# 을 사용
sudo umount /dev/sr1
sudo mount -r -t iso9660 /dev/sr1 /mnt
# 3) CD-ROM/DVD 가 마운트 되었으므로 내용을 확인하고 사용
# 4) CD-ROM 장치를 사용하고 나면 umount 명령을 사용하여 마운트를 해제
# 동일한 마운트 포인트에 동시에 두개의 장치를 마운트시킬순없다
# usb와 cd 를 마운트 시키기 위해서는 mnt 밑에 cd, usb 를 만들어서 각각 마운트 시켜줘야함.


# 1) Player 메뉴에서 [Manage]-[Virtual Machine Settings]를 선택
# 또는 VMware Player 메인 화면에서 [Edit virtual machine settings]를 선택
# 2) Virtual Machine Settings 창에서 [Add...]를 선택-> Add Hardware Wizard 창 -> [Next]를 클릭
# 3) Select a Disk Type 창에서 디스크의 종류로 ‘SCSI’를 선택하고 [Next] 클릭
# 4) Select a Disk 창에서 ‘Create a new virtual disk’를 선택하고 [Next] 클릭
# 5) Specify Disk Capacity 창에서는 디스크의 용량을 설정: 1GB
# 6) Specify Disk File 창에서 가상 디스크의 파일명을 지정
# 7) 디스크 파일이 생성되고 디스크 추가 작업이 완료
/dev/sd로 시작하는 이름을 사용
장치명이 /dev/sda라면 파티션의 이름을 다음과 같이 표시
# 기능 : 디스크의 파티션 생성, 삭제 ,보기 등 파티션을 관리한다.
# 형식 : fdisk [옵션] [장치명]
# 옵션 : -b 크기 : 섹터 크기를 지정한다. (512, 1024, 2048, 4096).
# -l : 파티션 테이블을 출력한다. (파티션 정보 보기)
fdisk /dev/sdb
fdisk -l
# 1) fdisk 명령을 실행 : 장치명을 인자로 지정
sudo fdisk /dev/sdb
# 2) 새로운 파티션을 생성
n
# 3) 파티션의 종류를 선택
- 기본(primary), 확장(extended)
# 4) 파티션의 번호를 선택
1
# 5) 퍼티션의 크기 설정
- 시작섹터 : 기본값
- 마지막섹터 : 크기 지정(+500MB)
# 6) 파티션 정보 확인
p
# 7) n 을 입력하여 두번째 파티션 생성
# 8) w 를 입력하여 파티션 설정정보 저장
# 기능 : 리눅스 파일 시스템을 만든다
# 형식 : mkfs [옵션] [장치명]
# 옵션 : -t 종류 : 파일 시스템의 종류를 지정한다 (기본값은 ext2)
# mkfs.ext2 , mkfs.ext3, mkfs.ext4 명령도 제공
mkfs /dev/sdb1 # 디폴트 ext2,
mkfs -t ext4 /dev/sdb1
# 기능 : 리눅스 개정판 확장 파일 시스템(ext2, ext3. ext4)을 만든다.
# 형식 : mke2fs [옵션] [장치명]
# 옵션 : -t 종류 : 파일 시스템의 종류를 지정한다(기본값은 ext2)
# -b 블록 크기 : 블록 크기를 바이트 수로 지정한다.
# -c : 배드 블록을 체크한다.
# -f 프래그먼트 크기 : 프래그먼트 크기를 바이트 수로 지정한다.
# -i inode 당 바이트 수 : inode 당 바이트 수를 지정한다(가본값은 4096B)
# -m 예약 블록 퍼센트 : 슈퍼유저에게 예약해둘 블록의 퍼센트를 지정한다(기본값은 5%)
mke2fs /dev/sdb1
mke2fs -t ext4 /dev/sdb1
# 1) mkfs 명령으로 /dev/sdb1 파티션에 ext2 파일 시스템 생성
sudo mkfs /dev/sdb1
# 2) mkfs.ext3 명령으로 /dev/sdb2 파티션에 ext3 파일 시스템 생성
sudo mkfs.ext3 -v /dev/sdb2
# 1G 짜리를 500MB 두개로 나누는데 sdb1 는 ex2 로 포맷하고 sdb2 는 ext3 로 포맷하겠다.
# 1) mke2fs 명령으로 /dev/sdc1 파티션에 ext3 파일 시스템을 생성
sudo mke2fs -t ext4 -b 4096 /dev/sdc2
# 2) mke2fs 명령으로 /dev/sdv2 파티션에 ext4 파일 시스템 생성 ( 블록크기는 4096B로 지정)
sudo mke2fs -t ext3 /dev/sdc1
sudo mkdir /mnt/hdd1
sudo mkdir /mnt/hdd2
sudo mkdir /mnt/hdd3
sudo mount /dev/sdb1 /mnt/hdd1
sudo mount -t ext3 /dev/sdb2 /mnt/hdd2
# sdb2 는 hdd2 에 마운트를 시켜준다
# 마운트 결과 ~
sudo cp /etc/hosts /mnt/hdd1
ls /mnt/hdd1
# 이 상태에서 /mnt/hdd 1의 마운트를 해제하면 /mnt/hdd1 디렉터리에는 어떤 파일이 있을까?
#-> 원래 있던 파일들이 그냥 보인다
#-> umount 는 삭제의 개념이 아니기 떄문

# 1) /dev/sdb2 의 파일 시스템을 언마운트
# 2) /dev/sdc1 의 파일 시스템은 /mnt/hdd1 디렉토리에 마운트
# 3) /dev/sdc2 의 파일 시스템은 /mnt/hdd2 디렉토리에 마운
# - 파일 시스템의 종류를 ext4 로 지정
# 4) /dev/sdc1 과 /dev/sdc2 의 파일 시스템이 제대로 마운트 되었는지 확인
# 5) /dev/sdc2 의 파일 시스템에 파일을 복사
# 6) /dev/sdc1 과 /dev/sdc2 파일 시스템의 마운트를 해제



/dev/sdb1, /dev/sdb2 는 크기가 각각 500MB 이다. 이를 LVM 으로 변환하고 1GB 짜리 LV 를 생성하여 마운트
# 1) lvm2 패키지를 먼저 설치
sudo apt install lvm2
# 2) /dev/sdb1, /dev/sdb2 의 파일 시스템 종류를 83(Linux)에서 8e(LinuxLVM)로 변경
# 3) /dev/sdb1, /dev/sdb2 에 PV 를 생성
sudo pvcreate /dev/sdb1
# 4) pvscan 명령으로 PV의 상태를 확인
# 5) 두 PV 를 통합하여 VG 를 생성한다. VG의 이름은 grp1로 지정
sudo vgcreate grp1 /dev/sdb1 /dev/sdb2
# 6) 생성된 VG grp1 을 활성화
sudo vgchange -a y grp1
# 7) 화렁화된 VG grp1 의 상태를 vgdisplay 명령으로 확인
sudo vgdisplay -v grp1
# 8) VG grp1 에는 PE 가 총 248개 있다. 이를 모두 합하여 하나의 LV를 생성
sudo lvcreate -l 248 grp1 -n mylvm1
# 9) 생성된 LV의 상태를 확인
sudo lvscan
# 10) LV mylvm1 에 ext4 파일 시스템 생성 : 장치명 :
sudo mke2fs -t ext4 /dev/grp1/mylvm1
# 11) VG의 상태를 확인아혀 LV 의 정보가 수정되었는지 확인
# 12) LV를 /mnt/lvm 디렉토리에 마운트하고 파일을 복사
sudo mount /dev/grp1/mylvm1 /mnt/lvm
# 기능 : 디스크의 남은 공간에 대한 정보를 출력한다.
# 형식 : df [옵션] [파일 시스템]
df #disk 별 용량 및 사용률을 보여준다.
df -a #모든 파일 시스템을 대상으로 디스크 사용량을 확인한다.
df -k #디스크 사용량을 KB 단위로 출력한다.
df -m #디스크 사용량을 MB 단위로 출력한다.
df -h #읽기 쉬운 단위로 표현해주는 가장 많이 쓰는 옵션 h
#->디스크 사용량을 알기 쉬운 단위(GB, MB, KB 등)로 출력한다.
df -t 파일 시스템 종류 #지정한 파일 시스템 종류에 해당하는 디스크의 사용량을 출력한다
df -T #그 파일 시스템의 타입(종류)도 같이 출력해준다
# 기능 : 디스크의 사용 공간에 대한 정보를 출력한다.
# 형식 : du [옵션] [디렉토리]
du # 현재 디렉토리의 디스크 사용량 출력
du -s # 전체 디스크 사용량 출력하기
sudo du -s /etc # 지정한 디렉토리의 전체 사용량만 출력
du -sh user1 # 특정 사용자의 디스크 사용량 출력 : 사용자의 홈 디렉토리를 지정
# user1 의 홈 디렉토리의 전체 크기가 -s 옵션 떄문에 나오고
# -h : 읽기 편하게 해주는
# 디렉토리나 파일 단위로 그 디렉토리 전체의 사용량이 얼마냐를 알아보는 명령어
# 1) 파일 시스템의 디스크 사용량을 MB 단위로 출력
df -m
# 2) ext4 파일 시스템의 디스크 사용량을 출력
df -t ext4
# 3) 전체 파일 시스템의 디스크 사용량을 출력
du -a
# 4) /usr 디렉토리가 사용하고 있는 디스크 사용량을 출력
sudo du -sh /usr
# 기능 : 리눅스의 파일 시스템을 점검한다.
# 형식 : fsck [옵션] [장치명]
sudo fsck /dev/sdd1 # 일반적인 파일 시스템 검사
sudo fsck -f /dev/sdd1 # 파일 시스템 강제 검사
sudo fsck.ext4 /dev/sdd3 # 파일 시스템 종류를 지정한 검사
sudo fsck -af /dev/sdb1 #sdb1을 검사, 강제(f), a(자동복구)
# 기능 : 리눅스의 확장된 파일 시스템(ext2, ext3, ext4)을 점검한다.
# 형식 : e2fsck [옵션] [장치명]
sudo e2fsk /dev/sdd1 # 일반적인 파일 시스템 검사
sudo e2fsk -f /dev/sdd1 # 파일 시스템 강제 검사
# 기능 : 장치의 배드 블록을 검색한다.
# 형식 : badblocks [옵션] [장치명]
sudo badblocks -v /dev/sdd1 # 배드 블록 검색하여 결과를 자세히 출력
sudo badblocks -v -o bad.out /dev/sdd1
# 검색한 배드블록 목록을 지정한 출력 파일에 저장하기
# 기능 : 파일 시스템의 정보를 출력한다.
# 형식 : dumpe2fs [장치명]
sudo dumpe2fs /dev/sd1 | grep superblock
# 기능 : 지정한 블록 크기만큼 파일을 복사한다.
# 형식 : dd [if=파일] [of=파일] [bs=바이트 수] [count=블록 수]
# -if=파일 : 표준 입력 대신 지정한 파일에서 읽어온다.
# -of=파일 : 표준 출력 대신 지정한 파일로 복사한다.
# -bs=바이트 수 : 한 번에 읽어오고 기록할 바이트 수다.
# -count=블록 수 : 블록 수만큼만 복사한다.
# 파일 시스템 복구하기
# 1) 파일 시스템의 기본 슈퍼블록을 dd 명령으로 삭제
# - 파일 시스템의 앞부분 20블록을 0값으로 채우기
sudo dd if=/dev/zero of=/dev/sdd1 bs=4096 count=20
# 2) /dev/sdd1 파일 시스템을 마운트 하면 오류 메세지가 출력
sudo mount /dev/sdd1 /mnt/hdd1
# 3) dumpe2fs 로 확인한 백업 슈퍼블록을 이용하여 /dev/sdd1 파일 시스템을 복구
sudo e2fsck -b 32768 -y /dev/sdd1