⇾ 2개의 개념
1) 통합 파일 시스템 ⇾ 디렉터리와 파일의 계층구조
2) 파일 시스템 타입 ⇾ 커널이 물리적 장치에 데이터를 저장하는 포멧 시스템
"/" (root) 경로를 통해 접근할 수 있음
개인 파일 시스템들이 모여 통합 파일 시스템이 된다.
⇾ root 디렉터리는 어떤 디렉터리에도 접목될 수 있다.
⇾ 마운트 지점 : 개인 파일 시스템이 통합 파일 시스템에 마운트 되는 디렉터리
장치마다 각자의 파일 시스템을 가짐, 이 파일 시스템은 많은 뿌리 많은 트리로 이루어져 있음
디렉터리 : 파일과 디렉터리들에게 계층구조를 제공
파일과 디렉터리 ⇾ 파일 타입
device special files ⇾ 커널에게 물리적 장치에 접근하는 것을 요청하는 방법을 제공, /dev 디렉터리에 저장됨
IDE hard drivers
First Channel : /dev/hda, /dev/hdb
Second Channel : /dev/hdc, /dev/hdd
SCSI(Small Computer System Interface) disks
/dev/sda, /dev/sdb
디스크는 파티션으로 나눠짐
파티션에 대한 정보는 파티션 테이블에 저장 됨
4개의 주요 파티션이 만들어질 수 있음 ⇾ sda1~4 (1. os 2. boot up)
주요 파티션 ⇾ 논리적 파티션으로 분할될 수 있음 (sda5, sda6, sda7 ......)
파티션을 만들고 제거하고 바꾸는데 사용
fdisk sda
⇾ sda 디스크의 파티션 수정
Type one-letter command
m : 명령어 리스트 출력
p : 파티션 테이블 출력
q : 종료
w : 디스크에 테이블 쓰기와 종료
d : 파티션 삭제
n : 새 파티션 추가
새 파티션의 파일 시스템을 초기화할 때 사용 (이전 데이터는 삭제되기 때문에 주의)
mkfs -t ext4 -c /dev/sda2
⇾ /dev/sda2의 파일시스템을 ext4로 만듦
blkid /dev/sda1
⇾ /dev/sda1의 파일시스템 체크
| FAT : FAT12/16/32 | DOS, Windows 9x, usb |
|---|---|
| NTFS | windows NT, 2000, XP, 7 |
| HFS, HFS+ | Mac |
| HPFS | OS/2 운영체제 |
| UFS | BSD 유닉스 파일 시스템 |
| ext2, ext3, ext4 | 리눅스, 안드로이드 2.3 |
| VMFS | VMWare |
| UDF | Optical disks |
root file system ⇾ other file system을 만듦 .... 어떻게?
other file system이 mount point를 통해 root file system에 마운트 된다.
⇾ 마운트 된 모든 파일 시스템의 파일들은 단일통합 이름 공간에서 엑세스 될 수 있다.
중요한 파일 시스템은 boot-up때 마운트 된다.
다른 파일 시스템들은 어느때 든지 마운트나 언마운트 할 수 있다.
⇾ mount는 root 권한 필요
mount /dev/sdb3 /mnt/extra
⇾ 마운트 / 파티션 / 마운트 포인트
파일 시스템 타입을 명시적으로 지정해야 할 때
mount -t vfat /dev/hdd1 /mnt/windows
⇾ 마운트 / 파일 타입 / 파티션 / 마운트 포인트
umonut /mnt/extra
⇾ /mnt/extra 마운트 포인트의 파일 시스템 언마운트
umonunt /dev/sdb3
⇾ /dev/sdb3 디바이스의 파일 시스템 언마운트
⇾ root 권한 필요, 사용중인 파일시스템은 언마운트 불가능
/etc/fstab : 파일시스템에 대한 정보를 포함하고 있음
[file system] [mount point] [type] [options] [dump] [pass]
proc /proc proc nodev,noexec,nosuid 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
auto : boot-up에 파일 시스템 마운트
noauto : boot-up에 마운트 되는것을 막음, 이동식 장치에 유용함
ro : read only
rw : read/write
users : non-root user도 mount/umount 허락
errors=remount-ro : error 발생시 read-only 옵션으로 재 마운트
덤프와 복원 백업 유틸리티에 사용
1 ⇾ 보통의 파일 시스템
0 ⇾ 제거 가능한 파일 시스템
자동 마운트 되는 파일 시스템 순서를 제어
1 ⇾ root filesystem
0 ⇾ boot-up에 마운트 되지 않는 파일 시스템
2 ⇾ other filesystems
-o loop option ⇾ 디스크 뿐만 아니라 파일시스템에 저장된 보통의 파일(이미지 파일)도 마운트 가능
CD-ROMs 이미지 테스트에 유용함
Ex)
dd if=/dev/zero of=disk.img bs=1024 count=1400
⇾ /dev/zero 파일을 disk.img라는 이름으로 복사, block size는 1024, count는 1400 ⇾ file size = block size * count = 1.4MB
mke2fs -F disk.img
⇾ disk.img 파일에 ext2 file system을 만듦
mkdir disk
⇾ mount point로 사용할 disk directory를 생성
su
⇾ mount는 root 권한이 필요하기 때문에 root 유저로 변경
mount -o loop disk.img disk
⇾ disk.img 파일을 마운트 포인트인 disk 디렉터리에 마운트
파일의 메타데이터를 담고 있고 해당 파일의 데이터 블록을 가리킨다.
Direct blocks : Inode index가 자신의 데이터 블록을 집적 가리킴
Indirect blocks : 직접 자신의 데이터 블록을 가리키지 않음, Inode index ⇾ Inode index ⇾ data blocks
Double indirect blocks : Inode index ⇾ Inode index ⇾ Inode index ⇾ data blocks
파일 이름이 저장 되는 곳
| map | |
|---|---|
| file name | inode number |
| a | 10 |
파일 이름으로 X, 파일의 inode로 찾음
⇾ inode가 가리키는 데이터 블록이 해당 파일의 데이터
inode rec_len name_len file_type name ls -al
18 16 5 2 music\0\0\0 musi\
inode ⇾ inode number
rec_len ⇾ 레코드 길이
name_len ⇾ 이름 길이
file_type ⇾ 1 : file, 2: directory
name : 파일 이름
원본 파일의 이름을 가리키는 링크
원본 파일 사라지면?
역할 수행 불가능 ... 왜? 이름을 가리키는 링크라 가리키고 있는 이름이 사라졌기 때문에
ln -s original_file symbolic_link ⇾ 심볼릭 링크 생성
Ex)
ln -s /home/eunchong/2012s_linux linux
⇾ 2012s_linux라는 파일명을 가리키는 linux 심볼릭 링크 생성
inode number로 다른 파일 참조
⇾ 하드 링크 inode = 원본 파일 inode
if) 하나를 수정하면?
둘다 영향을 받음
But 원본과 동일한 inode를 가지기 때문에 원본 파일이 삭제 되어도 hard link file은 접근가능
ln original_file hard_link ⇾ 하드링크 생성
Ex)
ln for.sh for.sh_hard
⇾ for.sh 파일로 for.sh_hard라는 하드 링크 생성
| 심볼릭 링크 | 하드 링크 |
|---|---|
| 구분 가능 | 구분 불가능 |
| 경로를 가리킴 | 파일을 가리킴 (디렉터리 불가능) |
| 이름을 참조 | inode number을 참조 |
| 다른 파일 시스템을 가리킬 수 있음 | 하나의 파일 시스템에서만 작동 |
| 원본파일 이름 변경, 삭제 ⇾ 심볼릭 링크 파괴 | 원본파일 이름 변경, 삭제 ⇾ 아무 영향 없음 |
| 디스크 공간 차지 (이름을 참조하는 포인터를 저장할) | 디렉터리 항목 만큼의 공간만 차지 |
1) 데이터 블록이 가득참
2) 전원 종료, 시스템 충돌로 courrupted
3) 아이노드 블록 가득참
df
⇾ 모든 마운트된 파일 시스템의 빈 공간을 나열해줌
df -h
⇾ 인간이 읽기 편한 옵션 (K, M, G단위로 나타내줌)
df -i
⇾ 아이노드 사용량을 보여줌
디스크 사용량을 요약해서 보여줌
-h : K, M, G단위로 나타내줌
-a : 모든 파일 출력
-s : 상위 디렉터리 하나로 요약해서 보여줌
-c : 모든 디렉터리들의 누적 합계
-S : 서브 디렉터리들을 포함해서
파일 시스템의 무결성 체크
fsck -f : 강제로 파일 시스템 체크
Waring! : 마운트된 파일 시스템에 fsck를 실행시키는 것은 매우 위험, 파일 중요 정보가 손상될 수 있음
User가 사용할 수 있는 디스크 공간을 제한하는 방법
Quotas ⇾ hard limit과 soft limit을 가짐
넘으면 경고와 유예기간을 줌, 만약 유예기간이 지나면 파일이 삭제되지는 않지만 더 이상 파일을 생성할 수 없다.
절대로 넘을 수 없다.
inode와 data block에 하드 링크과 소프트 링크가 있음
usrquota : user quota 활성화
grpquota : group quota 활성화
Ex) mount -o loop, usrquota,grpquota disk.img disk
유저와 그룹의 쿼터 제한을 체크
quotacheck
-c : aquota db 생성
-u : for user
-g : for group
-f : 강제 체크
유저 또는 그룹의 쿼터 제한 변경
-u username : 유저의 쿼터 제한 변경
-g groupname : 그룹의 쿼터 제한 변경
-t grace period : 유예기간 변경
Ex)
setquota -u eunchong 10 20 10 20 /dev/hda1
⇾ hda1 device에서 user eunchong의 쿼터 제한을 soft block 10, hard block 20, soft inode 10, hard inode 20으로 변경
setquota -t 3600 3600 /dev/hda1
⇾ hda1 device에서 유예기간을 block은 3600s(1h), inode는 3600s(1h)로 변경
quotaon / quotaoff
쿼타 기능 켜기 / 끄기, 오직 root만 할 수 있음
repquota
쿼타 제한의 정보를 출력, 루트 권한 필요
-a : 모든 파일시스템
-g : 그룹 쿼터
-v : 더 완전한 정보