IT기술/Linux

Linux System Admin 1 리눅스 파일 시스템과 디스크 관리

dobbby 2018. 11. 30. 11:22
반응형

리눅스 파일 시스템의 종류와 구조


> 디스크 디바이스

* Block Device

- 무작위로 액세스 할 수 있는 하드 디스크 장치에는 블록 장치라는 추상화 계층이 있어서 고정 크기 (보통 512바이트) 블록으로 형식을 지정할 수 있다.

- 블록은 다른 블록에 대한 액세스와 독립적으로 액세스 할 수 있다.

root #

# lsblk

# blkid (root 권한에서만 수행됨)

 


> 디스크 디바이스 이름 지정

* ATA(IDE) 디바이스 이름 지정

- /dev/hd로 시작하고 뒤에 단위 문자로 끝난다 (/dev/hda, /dev/hdb...)


* SCSI 디바이스 이름 지정

- /dev/sd 로 시작하고 단위문자로 끝난다 (/dev/sda, /dev/sdb, /devsdaa...)

- lvm 볼륨은 일반적으로 /dev/md0, /dev/md1 등으로 표시



> 디스크 디바이스 찾기

* /sbin/fdisk 또는 /usr/sbin/fdisk 를 이용하여 커널이 볼 수 있는 디스크 디바이스를 찾을 수 있다.

# fdisk -l | grep Disk

# fdisk -l | grep 'Disk /dev/sd'


* 하드웨어 리스트 보기 

# lshw | more (tool 설치 : # yum install lshw)


* lsscsi 명령어

- 모든 SCSI 디바이스와 에뮬레이터 디바이스에 대해 읽기 쉬운 포맷으로 출력

# lsscsi

# lsscsi -c


* /proc 파일 시스템을 이용한 SCSI 디바이스 찾기

# cat /proc/scsi/scsi

- Debian 계열에서는 해당 기능이 비활성화 되어 있는 경우도 있다.

# config_scsi_proc_fs 를 set 로 설정 후 재 컴파일



> 파일 시스템에 대하여

* 파일시스템에 대한 매뉴얼

# man fs


* 리눅스 커널이 현재 지원하고 있는 파일시스템 보기 (in momory, disk 에 없다)

# cat /proc/filesystems | grep -v nodev (no device)


* 리눅스에서 mount 명령어 입력시 -t 옵션이 없어도 자동으로 탐지하는 파일시스템 형식 목록

# cat /etc/filesystems

# cat /etc/filesystems | grep -v nodev


* 리눅스 파일시스템 확인하기

# df -T

# fsck -N /dev/sda1

# lsblk -f

# blkid /dev/sda1

# mount | grep "^/dev"

# file -sL /dev/sda1

# cat /etc/fstab



> 리눅스의 일반 파일 시스템

* ext2

- 2GB 파일 크기 지원, 255바이트 파일 이름 길이 지원


* ext3 

- journalling 기능 추가 (디스크의 journal에 먼저 기록하고, journal 이 주기적으로 파일 시스템에 변경 내용을 기록하는 것)

- 2TB 까지 파일 크기 지원


* ext4 (Debian 계열)

- 2008년 이후 버전에서 가용

- 16TB까지 지원


* xfs

- 확장성이 뛰어난 고성능 파일시스템 RedHat Enterprise 7의 기본 파일 시스템

- Irix 용으로 제작, FreeBSD 에서도 사용

- Redhat/CentOS 영역 외부의 distrebutions에서는 거의 사용되지 않음


* vfat

- 플로피디스크 fat12, ms-dos fat16, 대용량 디스크 fat32의 형태로 존재

- 보안, 링크같은 기능이 없다

- 다른 OS(Windows) 사이에서 데이터를 교환하는데 사용


* iso 9660

- cdrom 의 표준 형식




디스크 추가 설치 및 관리


> 디스크 파티션

* 디스크 추가 확인

# fdisk -l

# fdisk /dev/sdb

m (help)

n  (add a new partition)

p (primary)

1 (partition number)

2048 (firstsector)

+2G

w (write table to disk and exit)



> 파티션에 파일 시스템 넣기

* 파일 시스템을 만드는 실행 파일 들 (/sbin/mk*)

# ls -llS /sbin/mk*


* 파티션에 파일 시스템 넣기

# mkfs.ext4 /dev/sdb1

# file -sL /dev/sdb1



> 파일 시스템 점검

* fsck 툴은 파일시스템의 에러를 점검하는데 사용되는 툴로 사용자가 직접 조작하는 툴이다.

# ls / sbin/*fsck*


* /etc/fstab 의 마지막 컬럼의 의미

- 시스템 부팅 시 파일시스템 점검 여부 설정

0: fsck 명령을 수행하지 않음

1: 루트 파일시스템을 점검

2: 나열된 순서대로 점검




파일시스템 마운트


> 파일 시스템 mounting

* 파티션에 파일 시스템을 생성한 다음에는 mount 해야 사용할 수 있다

- 파일 시스템 mount 는 디렉토리를 사용

- 파티션을 mount 한다고 하는 대신 파일 시스템을 mount 한다고 함


* 모든 Unix 시스템에서는

- 모든 파일과 디렉토리는 거대한 파일 트리의 한 부분이다.

- 파일에 접근하기 위해서는 "/"(root) 에서부터 전체 경로를 알아야만 한다.

- 컴퓨터에 파일 시스템을 추가할 때 파일 트리의 특정 부분을 가용하게 만들어야 한다.

- 파일 시스템이 가용하도록 만든 디렉토리를 mount point 라고 한다.



> 로컬 파일 시스템 mount 하기

* 마운트

# mkdir /home/project1

# mount -t ext4 /dev/sdb1 /home/project1


* 마운트 해제

# umount /home/project1



> mount 파일 시스템 형식과 /etc/filesystems 및 /proc/filesystems

* mount 명령은 먼저 /etc/filesystems 파일을 검사한다. (파일 시스템을 분명하게 정의하지 않을 때)

- mount 명령은 파일 검사 시 no dev 라인은 건너 뛴다.

* /etc/filesystems 파일이 존재하지 않거나 파일의 마지막 라인이 * 단일 라인으로 끝나는 경우

- mount 명령은 /proc/filesystems 파일을 읽는다

# cat /etc/filesystems

# cat /proc/filesystems | grep -v nodev



> mount 된 파일 시스템 보기

* mount된 모든 파일 시스템을 보여준다.

# mount | grep /dev/sdb1


* 커널이 파일 형태로 파일 시스템 정보를 제공하는 것으로 하드 디스크에 파일 형식으로는 존재하지 않는다

# cat /proc/mounts | grep /dev/sdb1


* 커널에 의해 업데이트되지 않고 mount 명령어에 의해 유지된다.

# cat /etc/mtab | grep /dev/sdb1


* df 명령어 

- mount 된 각 파일 시스템의 여유 공간을 포함하여 보다 많은 정보를 사용자 친화적 방식으로 보여준다.

- 파티션의 크기, 여유 공간, 사용된 기가 바이트 및 백분율 및 마운트 포인트를 볼 수 있다.

# df -h


* du 명령어

- 파일 및 디렉토리의 디스크 사용을 요약하여 보여준다.

- 마운트 지점에서 du를 사용하면 해당 파일 시스템에 사용되는 디스크 공간을 효과적으로 볼 수 있다

- 각 하위 디렉토리를 재귀적으로 표시할 수 있지만 -s 옵션은 상위 디렉토리에 대한 전체 요약을 제공하며 종종 -h와 함께 사용된다.

  즉 마운트 지점에서의 du -sh 는 해당 파티션에서 파일 시스템이 사용하는 총 크기를 나타낸다.



> 파일 시스템 영구적으로 mount 하기

* /etc/fstab  (백업 필수)

- 파일시스템 테이블은 파일 시스템 목록을 포함하여 부팅시 자동으로 마운트할 수 있는 옵션이 포함되어 있다. 

# vi /etc/fstab

# mount -a (적용)


> mount 포인트의 보안

* ro (read-only) 옵션

- 파일 시스템을 읽기 전용으로 마운트하여 어느 누구도 쓸 수 없게 만드는 것

# mount -t ext4 -o ro /dev/sdb2 /home/project2


* noexec (no execution) 옵션

- mount 된 파일 시스템에서는 binary 나 script가 실행되지 못하도록 하는 것

# mount -t ext4 -o noexec /dev/sdb2 /home/project2

# chown -R linux:linux project2

# cp /bin/cat /home/project2

# /home/project2/cat /etc/hosts

# echo echo hello > /home/project2/helloscript

# chmod +x /home/project2/helloscript

# /home/project2/helloscript


* nosuid (no setuid) 옵션
- nosuid 옵션은 mount 된 파일 시스템에서 binary 파일에 setuid 비트를 설정할 수는 있으나 무시한다

# mount -o nosuid /dev/sdb3 /home/nosuid

# ls -ld nosuid/

# cp /bin/sleep /home/nosuid

# ls -ld /home/nosuid/sleep

# chown root:root /home/nosuid/sleep

# chmod 4755 /home/nosuid/sleep

# ls -ld /home/nosuid/sleep

# /home/nosuid/sleep 500&

# ps -f 14952



리눅스 파일 시스템의 종류와 구조


> USB flash drive 읽기

* vfat 형식으로 윈도우에서 포맷된 USB 플래시 드라이블르 리눅스에서 인식하여 파일 읽기

# lsblk

# mkdir -p /mnt/USB

# mount -t vfat /dev/sdb1 /mnt/USB

# cd /mntUSB

# ls


* NTFS 형식으로 윈도우에서 포맷된 USB 플래시 드라이브를 리눅스에서 인식하여 파일 읽기

# yum install epel-release

# yum install ntfs-3g

# mkdir -p /mnt/USB
# mount /dev/sdb4 /mnt/USB

# ls -l /mnt/USB



> 디스크 swap 파티션 (Disk Partition) 만들기

* 새로운 파티션을 swap 영역으로 추가하기

# mkswap /dev/sdb1

# swapon /dev/sdb1

# swapon -s


* 기존 디스크 파티션을 swap 영역으로 추가하기

# mount /dev/sdb1 /home/project1

# dd if=/dev/zero of=/home/project1/swapfile bs=1024 count=100

# mkswap /home/project1/swapfile

# swapon /home/project1/swapfile

# swapon -s













반응형