06 linux system File System of Linux

Sisyphus·2022년 7월 16일

Ubuntu

목록 보기
7/9

파일 시스템

⇾ 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 command

파티션을 만들고 제거하고 바꾸는데 사용

fdisk sda  
⇾ sda 디스크의 파티션 수정  
  
Type one-letter command  
m : 명령어 리스트 출력  
p : 파티션 테이블 출력  
q : 종료  
w : 디스크에 테이블 쓰기와 종료  
d : 파티션 삭제  
n : 새 파티션 추가  


mkfs command

새 파티션의 파일 시스템을 초기화할 때 사용 (이전 데이터는 삭제되기 때문에 주의)

mkfs -t ext4 -c /dev/sda2  
⇾ /dev/sda2의 파일시스템을 ext4로 만듦  
  
blkid /dev/sda1   
⇾ /dev/sda1의 파일시스템 체크  


파일시스템 타입

FAT : FAT12/16/32DOS, Windows 9x, usb
NTFSwindows NT, 2000, XP, 7
HFS, HFS+Mac
HPFSOS/2 운영체제
UFSBSD 유닉스 파일 시스템
ext2, ext3, ext4리눅스, 안드로이드 2.3
VMFSVMWare
UDFOptical disks


마운트 파일시스템

root file system ⇾ other file system을 만듦    .... 어떻게?
other file system이 mount point를 통해 root file system에 마운트 된다.
⇾ 마운트 된 모든 파일 시스템의 파일들은 단일통합 이름 공간에서 엑세스 될 수 있다.



마운트

중요한 파일 시스템은 boot-up때 마운트 된다.
다른 파일 시스템들은 어느때 든지 마운트나 언마운트 할 수 있다.
⇾ mount는 root 권한 필요



other file systems 마운트

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

/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  

options

auto :  boot-up에 파일 시스템 마운트  
noauto : boot-up에 마운트 되는것을 막음, 이동식 장치에 유용함  
ro : read only  
rw : read/write  
users : non-root user도 mount/umount 허락  
errors=remount-ro : error 발생시 read-only 옵션으로 재 마운트

dump

덤프와 복원 백업 유틸리티에 사용  
1 ⇾ 보통의 파일 시스템  
0 ⇾ 제거 가능한 파일 시스템  

pass

자동 마운트 되는 파일 시스템 순서를 제어  
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는 1400file 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 디렉터리에 마운트  


Inodes (Index nodes)

파일의 메타데이터를 담고 있고 해당 파일의 데이터 블록을 가리킨다.

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 nameinode number
a10


파일이 자신의 데이터를 찾는법

파일 이름으로 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라는 하드 링크 생성  


심볼릭 링크  VS  하드 링크

심볼릭 링크하드 링크
구분 가능구분 불가능
경로를 가리킴파일을 가리킴 (디렉터리 불가능)
이름을 참조inode number을 참조
다른 파일 시스템을 가리킬 수 있음하나의 파일 시스템에서만 작동
원본파일 이름 변경, 삭제 ⇾ 심볼릭 링크 파괴원본파일 이름 변경, 삭제 ⇾ 아무 영향 없음
디스크 공간 차지 (이름을 참조하는 포인터를 저장할)디렉터리 항목 만큼의 공간만 차지


파일 시스템의 문제

1) 데이터 블록이 가득참
2) 전원 종료, 시스템 충돌로 courrupted
3) 아이노드 블록 가득참



df command

df  
⇾ 모든 마운트된 파일 시스템의 빈 공간을 나열해줌  
df -h  
⇾ 인간이 읽기 편한 옵션 (K, M, G단위로 나타내줌)  
df -i  
⇾ 아이노드 사용량을 보여줌  


du command

디스크 사용량을 요약해서 보여줌

Options

-h : K, M, G단위로 나타내줌  
-a : 모든 파일 출력  
-s : 상위 디렉터리 하나로 요약해서 보여줌  
-c : 모든 디렉터리들의 누적 합계  
-S : 서브 디렉터리들을 포함해서  


fsck command

파일 시스템의 무결성 체크
fsck -f : 강제로 파일 시스템 체크

Waring! : 마운트된 파일 시스템에 fsck를 실행시키는 것은 매우 위험, 파일 중요 정보가 손상될 수 있음



Quotas

User가 사용할 수 있는 디스크 공간을 제한하는 방법
Quotas ⇾ hard limit과 soft limit을 가짐



soft limit

넘으면 경고와 유예기간을 줌, 만약 유예기간이 지나면 파일이 삭제되지는 않지만 더 이상 파일을 생성할 수 없다.



hard limit

절대로 넘을 수 없다.

inode와 data block에 하드 링크과 소프트 링크가 있음



마운트 할 때 옵션

usrquota : user quota 활성화  
grpquota : group quota 활성화  
Ex) mount -o loop, usrquota,grpquota disk.img disk  


quotacheck command

유저와 그룹의 쿼터 제한을 체크
quotacheck

option

-c : aquota db 생성  
-u : for user  
-g : for group  
-f : 강제 체크  


setquota command

유저 또는 그룹의 쿼터 제한 변경

-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)로 변경


repuota/quotaon/quotaoff commands

quotaon / quotaoff  
쿼타 기능 켜기 / 끄기, 오직 root만 할 수 있음  
  
repquota  
쿼타 제한의 정보를 출력, 루트 권한 필요  
-a : 모든 파일시스템  
-g : 그룹 쿼터  
-v : 더 완전한 정보

0개의 댓글