linux class 1 페이지

본문 바로가기
사이트 내 전체검색


회원로그인

linux class

리눅스 파일시스템 및 마운트

페이지 정보

작성자 admin 작성일15-12-23 12:21 조회443회 댓글0건

본문

리눅스 파일시스템 구조
------------------------------------------------------------------------
boot block | Block Group 0 | Block Group 1 | Block Group 2 | ... | Block Group n
------------------------------------------------------------------------
그리고 각 block group 은 아래와 같은 형태로 구성되어 있다.
------------------------------------------------------------------------
Super Block | Group Descriptor | GDT | Block Bitmap | Inode Bitmap |Inode Table | Data Blocks
-----------
이러한 파일시스템 구조는 파일시스템 생성시 만들어진다.
ex) mkfs -t ext3(또는 ext2) /dev/sdc1
- 생성된 파일시스템의 논리적인 구조는 dumpe2fs 로 볼수 있다.
ex) dumpe2fs /dev/sdc1
*. boot block 은 볼 수 없음.


부트블록(부트섹터)

- 운영체제를 부팅시키기 위해 필요한 코드를 저장
- 대부분의 파일스템들은 부트블록으로 시작
- 하드웨어가 부팅에 필요한 코드를 부트블록에서 찾는다.

슈퍼블록

- 블록 그룹의 가장 앞에 위치.
- 파일시스템과 관련된 정보를 담고 있음. 파일 시스템의 전체 크기,마운트정보 등..
- 리눅스 운영체제는 슈퍼블록의 정보를 사용하여 파일시스템을 관리함.
- 다른 블록그룹에 있는 슈퍼블록도 똑 같은 내용을 가지고 있는 사본이다.

. 매직넘버 - ext 파일시스템의 슈퍼블록임을 의미하는 숫자
. 마운트횟수 - 얼마나 많이 마운트 되었는지를 나타낸다.
.블록그룹번호 - 파일시스템내에서 몇 번째 블록인지를 나타내는 번호

블록크기 - 파일시스템의 기본 블록크기를 바이트 단위로 표시(예를들면 1024byte)
그룹당 블록수 - 하나의 그룹에 속하는 블록 갯수
free blocks - 할당되지 않은 block 갯수
free inode - 할당되지 않은 inode 갯수
first inode - 파일시스템내의 가장 첫 번째 inode 번호

group 디스크립터 table
- 해당 파일시스템 내의 모든 블록 그룹에 대한 정보를 기록.
- 다른 블록그룹에 있는 group 디스크립터 영역도 똑 같은 내용을 가지고 있는 사본이다.
. 첫 번째 inode table block 의 블록번호
. 그룹내의 free block 갯수
. 그룹내의 inode 갯수
. 디렉토리갯수

block bitmap - 블록 그룹에서 블록의 할당 상태를 나타내는 맵, 블록을 할당하거나 해제 할 때 사용된다.
inode bitmap - inode 의 할당 상태를 나타내는 맵, inode를 할당하거나 해제 할 때 사용

아이노드(inode = index node) 블록

- 파일의 정보[접근권한/소유주/파일크기/inode 번호 등]를 저장하고있는 부분.
- 파일 하나당 하나의 아이노드가 사용됨.
- 파일의 형태와 무관하게 아이노드 블록을 가지게 됨


데이터 블록

- 실제 데이터 내용이 저장되는 디스크 영역

*file type

filesystem mount
- 리눅스에서 파일시스템에 접근하기 위해서 마운트라는 개념을 사용한다.
- 모든 블록장치파일은 마운트를 하지 않으면 사용할 수 없다.
- mswindows 의 C: 나 D: 같은 드라이버 문자를 통해서 장치파일에 접근할 수는 없다.

시스템의 마운트 정보는 df(disk free) 명령으로 확인할 수 있다.

man mount
MOUNT(8) Linux Programmer's Manual MOUNT(8)
NAME
mount - mount a file system
SYNOPSIS
mount [-lhV]
mount -a [-fFnrsvw] [-t vfstype] [-O optlist]
mount [-fnrsvw] [-o options [,...]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir

mount -t 파일시스템타입 -o 옵션 device 마운트포인터

ex) mount -t ext3 -o ro,nosuid /dev/sdc1 /mnt/data

DESCRIPTION

All files accessible in a Unix system are arranged in one big tree, the
file hierarchy, rooted at /. These files can be spread out over sev-
eral devices. The mount command serves to attach the file system found
on some device to the big file tree. Conversely, the umount(8) command
will detach it again.

마운트 되어 있는 파일시스템 정보는 df 명령어로 확인할 수 있다.
[root@river root]# df -h (h 옵션을 사용하면 보기 편하게 출력할 수 있다)
centos2[root /root]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 4.8G 665M 3.9G 15% /
/dev/sda3 13G 3.7G 8.5G 30% /usr
/dev/sdb1 988M 18M 920M 2% /home
/dev/sdc1 988M 18M 920M 2% /data
tmpfs 506M 0 506M 0% /dev/shm
centos2[root /root]#

각 파일시스템의 총 용량,현재 사용량, 남은 공간등의 정보를 확인할 수 있다. /dev/shm 을 제외한 각 라인은
리눅스 파일시스템 정보이다. 파티션 설정은 되어 있으나 마운트 되지 않은 정보는 출력되지 않는데 그러한 정보는
파티션 설정 명령어인 fdisk 명령으로 확인할 수 있다.

파일시스템의 종류.

minix : 과거에 리눅스가 minix 머신에서 돌아갈 때, 리눅스가 사용한 파일시스템. 현재는 사용안됨.
xiafs,extfs : 과거의 리눅스 파일시스템. 지금은 사용하지 않는다.
ext2fs : 리눅스 파일시스템. 현재는 많이 사용하지는 않는다.
ext3fs : 리눅스 파일시스템. ext2 파일시스템에 이어서 나온 파일시스템, 요즘은 ext2fs 대신 이 파일시스템이 많이 사용된다.
ext4fs : 리눅스 파일시스템. centos 인 경우 6.x 버전부터 지원한다.
vfat : fat16, fat32를 리눅스에서 지원하기 위해서 개발된 가상의 파일시스템.
ntfs : windows nt 파일시스템
iso9660 : 시디롬 파일 시스템
nfs : network file system. 이 파일 시스템을 사용하기 위해서는 nfs 서버가 구성되어 있어야 한다.

*. ext2 와 ext3 파일시스템 비교
ext2 의 단점
- 갑작스러운 시스템 다운(정전)이 되었을 경우 파일시스템이 손상될 가능성이 많다.
-. 모든 파일시스템은 마운트할 수 있는 횟수가 제한되어 있다
그래서 ext2 파일 시스템에서는 마운트 제한(maximum mount)에 도달하였을 경우에
데이터 유실을 방지하기 위해서 fsck를 자동 실행하도록 되어 있다.
- fsck를 실행하더라도 한계가 있었다

즉, 파일시스템의 크기에 따라서 fsck를 실행하는 것이 무의미한 작업일 경우가 있다
파일시스템의 크기가 너무 작을 경우 fsck로 점검하는 것이 무의미했다.
그리고 파일시스템의 크기가 너무 큰 경우에는 시간이 너무 오래 걸려서
복구작업과 부팅시간이 너무 오래 걸리는 단점이 있다

ext3의 장점 :

- ext3 파일시스템에서는 기록된 인덱스 로그를 이용하여 복구할 수 있도록 하였다.
그래서 갑작스러운 시스템 다운시 부팅시간을 단축할 수 있게 되었다.
즉, fsck로 파일시스템을 일일이 채크하지 않아도 인덱스로그를 이용하기 때문에
복구시간과 부팅시간이 단축된다는 점이다.
*. 저널링 파일 시스템의 종류에는 ext3, reiserfs, XFS등이 있다.대표적인 것이 ext3이다.

마운트 명령어 형식.
mount -t 파일시스템타입 디바이스명 마운트포인터
ex)
mount -t vfat /dev/hda1 /mnt/mswin
mount -t iso9660 /dev/hdc /mnt/cdrom
mount -t ext3 /dev/sdc2 /home

블록장치가 더 이상 필요하지 않으면 마운트 해제(nmount) 할 수 있다.
unmount 한 장치는 다시 마운트 할때까지 사용할 수 없다.
만약 시디롬을 사용하고 시디를 꺼내려면(eject) 반드시 시디롬 장치파일을
마운트 해제 하여야 한다.

umount

umount 마운트포인터 또는 디바이스파일명.

ex)

[root /newhome]# pwd
/newhome
[root /newhome]# umount /newhome
umount: /newhome: device is busy
umount: /newhome: device is busy
[root /]# df -h /newhome
Filesystem Size Used Avail Use% Mounted on
/dev/sdc1 248M 6.1M 230M 3% /newhome
df 명령어로 출력결과 sdc1 이 사용중임을 알수 있다.
현재의 위치가 마운트 포인트이면 그 장치는 사용중인것으로 간주된다.
사용 중인 장치파일은 마운트 해제 되지 않는다.
마운트 해제 하기 위해서는 현재 디렉토리에서 마운터포인터 밖으로 이동하여
마운트 해제 하여야 한다.

*. 마운터포인터를 사용중인 프로세스가 한개라도 있으면 마운터는 해제되지
않는다. 마운터 포인터를 사용중인 프로세스를 쉽게 찾는 명령은 fuser
ex) fuser /newhome
[root /]# fuser /newhome
/newhome: 4571c <--- PID 4571 프로세스가 사용중.
- 하지만 이런경우에는 /newhome 의 하위디렉토리를 사용중인 프로세스는
출력되지 않는다. 만약 어떤 사용자가 /newhome 아래의 어떤 디렉토리안에
있으면 프로세스가 출력되지 않으므로
fuser /newhome/* <--- 이렇게 와일드카드(*)문자를 사용하면 된다.
*. 마운트 포인터를 사용중인 프로세스를 fuser 명령어로 모두 제거할수 있다.

fuser -k /nehome <--- k(kill) 옵션을 사용하면 /newhome 을 사용중인 프로세스를 강제종료.
fuser -k /newhome/* <--- 하위디렉토리를 사용중인 프로세스를 강제 종료.



*. 마운트 설정 파일 - /etc/fstab
아래는 centos 5.9 에서 파티션 자동설정으로 설치한경우의 fstab 파일내용
------------------------------------------------------------------------
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
------------------------------------------------------------------------


아래는 fstab 의 다른 예이다.
[root /]# cat /etc/fstab
------------------------------------------------------------------------
UUID=8bd23abd-ca18-4609-a374-c407bf0b84b2 / ext3 defaults 1 1
/dev/sdb1 /home ext3 nosuid defaults 1 2
LABEL=/data /data ext3 ro,nosuid defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
UUID=30aa3f23-7e43-4599-9e1a-a2700c26b77e swap swap defaults 0 0
------------------------------------------------------------------------

/etc# 아래는 CentOS 6.5 버전인 경우
------------------------------------------------------------------------
#
# /etc/fstab
# Created by anaconda on Wed Apr 9 02:58:07 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=55c7f442-1c10-48e8-9029-bd60e23ca0ff / ext4 defaults 1 1
UUID=f2783d44-870c-4f9b-bfd4-f521f24c028f /data ext4 defaults 1 2
UUID=a4524fd5-4b45-4690-ab7b-cf71d63c8352 /home ext4 defaults 1 2
UUID=7b37b84c-39ec-46ce-a6b7-ab204a2b7b49 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
------------------------------------------------------------------------

첫번째 항목 : 장치이름이나 LABEL 또는 UUID 값이 올수 있다.
두번째 항목 : 마운트 포인터
세번째 항목: 파일시스템 타입
네번째 항목: 마운트 옵션
다섯번째 항목: 0 또는 1 - 백업가능성 유무로서 0(백업x) , 1(백업o)
여섯번째 항목: 0 또는 1이나 2 - 부팅시 파일시스템 자동체크 여부
--> 0은 파일시스템 체크 안함
---> 1 또는 2는 파일시스템 체크함( / 파티션인경우는 1 로한다. 그외는 2로 설정)

첫번째 항목중
UUID (Universal Unique IDentifier) 는 네트워크 상에 있는 개체 식별자라는 의미로
디스크 장치도 서버상에서 하나의 개체 식별자로서 구분하겠다는 의미.

UUID 값은 파일시스템 생성시 자동으로 할당되며 수정할 수도 있다.
UUID 값 수정 및 확인은 tune2fs 명령어 또는 dumpe2fs 로 할수 있다.

[root /]# tune2fs -l /dev/sda3 | grep UUID
Filesystem UUID: 69a544e6-4c4a-4a6f-a16a-0b3e6cb99d10

*. UUID 값을 변경하려면 아래와 같이 하면 된다.
[root /root]# tune2fs -l /dev/sdb1 | grep -i uuid
Filesystem UUID: bddeadaa-f9db-489d-b919-2700c4807fc6
[root /root]# dumpe2fs /dev/sdb1 | grep -i uuid
dumpe2fs 1.39 (29-May-2006)
Filesystem UUID: bddeadaa-f9db-489d-b919-2700c4807fc6
*. UUID 값을 아래처럼 임의의 값으로 변경할 수 있다.
[root /]# tune2fs -U random /dev/sdb5
tune2fs 1.40.8 (13-Mar-2008)
[root /]# tune2fs -l /dev/sdb5 | grep UUID
Filesystem UUID: f75ca609-97c1-4802-b8fe-164d376aed8d <= 변경됨.
[root /]#
*. UUID 값을 제거하는것은 위에 random 대신에 clear 를 적어주면 된다.
그리고 random 대신에 time 을 적어주더라도 마찬가지로 무작위로 UUID 값을
할당하게 됩니다. 그러나 file system 생성시 UUID 값이 할당되므로 특별한
경우가 아니면 직접 생성할 필요가 없다.

*. 첫번째 항목에 장치명이나 UUID 값 대신에 label 이름을 사용할 수 있다.
[root /]# e2label ; label 을 출력하거나 설정하는 명령어
Usage: e2label device [newlabel] <= label 을 설정하거나 수정할때.
[root /]# e2label /dev/sda1 <= 장치의 label을 확인할때.
/ <-- label 이름이 / 로 설정되어 있음.
[root /]# e2label /dev/sda3
/home <== /dev/sda3 의 label 이름은 /home 으로 설정되어 있다.
[root /]#

*.첫번째 항목에 장치명을 사용할 수도 있으며 이것은 가장 전통적인 방식.


** 마운트할때 디폴트로 적용되는 옵션과 fstab 에 설정되어 있는 defaults 항목은
메뉴얼 페이지를 보면 아래의 옵션이 적용된다고 되어 있다.

defaults
Use default options: rw, suid, dev, exec, auto, nouser, and async.

옵션설명 -
rw : 읽기,쓰기
ro : 읽기전용
suid : setuid 퍼미션 허용
nosuid:setuid 퍼미션 허용하지 않음
exec : 실행파일 실행권한 허용
noexec: 실행파일 실행권한 허용하지 않음
user:일반유저에게 마운트권한 허용
nouser : 일반사용자에게는 마운트 권한 허용하지 않음
auto : mount -a 명령어로 마운트할 경우 자동마운트 허용

*. 나머지 옵션에 대해서는 fstab file및 mount 명령의 메뉴얼 페이지를
참고 바랍니다.
-----------------------------------------------------------------------
*** 마운트 설정 예제 ***
/var/log 디렉토리의 모든 파일을 다른 파티션으로 옮겨서
로그파일을 옮긴 파티션에서 계속 관리를 하도록 하시오.


solve)
옮기는 디스크 파티션을 /dev/sdc1 으로 가정한다.
fdisk /dev/sdc 로 주 파티션을 전체크기로 하나로 만든다.
그다음 mkfs -t ext4 /dev/sdc1
mount    /dev/sdc1    /mnt/d3p1
cp -rp /var/log/*    /mnt/d3p1
그다음 rm -rf /var/log/*
그리고 /etc/fstab 파일을 편집기로 열어서 맨 아래에
LABEL=/var/log     /var/log     ext4     defaults     1 2 추가한다.
그리고 e2label /dev/sdc1 /var/log 로 라벨명을 설정한다.
*. 만약 라벨 없이 장치명으로 바로 등록하는 경우라면
/etc/fstab 파일 맨 아래에 LABEL 대신에
/dev/sdc1      /var/log      ext4      defaults     1 2

그다음 확인은
umount -a ; mount -a 한다음
df 명령어로 확인하였을때
/dev/sdc1 988M 5.8M 931M 4% /var/log

장치명과 마운터포인터가 제대로 표시되면 성공.

------------------------------------------------------------------------
예제2 maunal page 를 다른 장치로 옮기기

/usr/share/man/* ---옮기기----> /dev/sdd1

cp -rp /usr/share/man/*    /dev/sdd1 의마운터포인터
(*. 파일이 많아서 복사하는데 다소 시간이 걸립니다. 1분에서 ~ 3분 정도)

rm -rf /usr/share/man/*
....... 이하생략. ( 직접해야 합니다)
...
umount -a ; mount -a ; man ls (man page 가 보여야 함)
------------------------------------------------------------------------
예제 3. centos의 모든계정을 (/home/*) /dev/sdb1 으로 옮기기
(/dev/sdb1 은 전체크기로 주파티션을 하나만 설정.)

/home/* ------- 옮기기 ------------> /dev/sdb1
(cp -rp /home/* /dev/sdb1 의 마운트포인터)
복사완료후 rm -rf /home/* (복사하였으면 원래의 데이터는 필요없으므로 삭제)
............
............

--------
계정 옮기는 작업이 긑났으면
아래의 명령으로 확인
umount -a ; mount -a ; su - user1 <-- 에러나 경고없이 user1 계정으로 변경되면 성공)

댓글목록

등록된 댓글이 없습니다.


접속자집계

오늘
176
어제
66
최대
611
전체
453,457
개인정보취급방침 서비스이용약관 twoseven.kr All rights reserved.
상단으로