파일시스템 운용

2010.05.11 16:50

조인상 조회 수:10987

원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어

Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

본문 : http://www.ischo.net -- 조인상 //시스템 엔지니어

+++++++++++++++++++++++++++++++++++++++++++++++++++++++


출처 : http://www.systemadmin.pe.kr


file system은 root file system과 mountable file system으로 구분 할 수 있는데, root file system은
file system mount table인vfstab 파일 (유닉스 계열에 따라 fstab 인 경우도 있음)에 보면 / 라
표시된 부분이다. 필요에 따라 root 사용자 권한으로 시스템 콘솔이나 터미널로 로그인하여
수정 할 수 있다.

/etc/vfstab 파일

시스템이 부팅될 때 자동으로 검색하여 마운트하는데 참조하는 파일이 vfstab 파일이다.

[#/] vi /etc/vfstab
/dev/root /dev/rroot / vxfs 1 no mincache=closesync SYS_RANGE_MAX
/dev/stand /dev/rstand /stand bfs 1 no - SYS_RANGE_MAX
/proc - /proc proc - no - -
/processorfs - /system/processor profs - yes - -
/dev/fd - /dev/fd fdfs - no - -
/dev/dsk/f0t /dev/rdsk/f0t /install s5 - no - -
/dev/dsk/f1t /dev/rdsk/f1t /install s5 - no - -
/dev/dsk/f0 /dev/rdsk/f0 /install s5 - no - -
/dev/dsk/f1 /dev/rdsk/f1 / install s5 - no - -
/tmp - /tmp memfs - yes swapmax=10485760, rootmode=1777
/var/tmp - /var/tmp memfs - yes swapmax=41943040,rootmode=1777
/dev/_tcp - /dev/_tcp specfs - yes dev=tcp -
#/dev/dsk/f03ht /dev/rdsk/f03ht /mnt dosfs - yes rw -
###### User Area #########
/dev/dsk/c0b0t0d0s1 /dev/rdsk/c0b0t0d0s1 /u vxfs 1 yes mincache=closesync SYS_RANGE_MAX

내부 구성은 아래와 같은 순서로 되어 있다.
special 파일시스템에 대한 logical device 명으로, 여기서 logical device는 block device를
지칭한다. 블록 디바이스는 대부분 /dev/dsk밑에 정의되어 있다.
fsckdev 파일시스템에 대한 logical device 명으로, 여기서 logical device는 raw device를
지칭한다. 이 디바이스는 대부분 /dev/rdsk 밑에 정의되어 있다.
mountp 해당 파일시스템의 디폴트 mount point로 부팅이 되면 이 이름으로 마운트 됨.
fstype 사용될 해당 파일시스템의 종류
fsckpass 자동으로 파일시스템을 검사할 것인가를 결정하는데 사용될 pass number
automount 시스템 부팅시에 자동으로 마운트 할 것인지 안 할지를 결정
yes 자동으로 마운트
no 자동으로 마운트 안함
mntopts 콤마로 구분되는 마운트 옵션들의 리스트
mandatory access control default file system ceiling level. 특정 security가 설치되지 않으면
사용되지 않는 필드임.

vfstab 파일을 vi 편집기를 이용하여 임의로 엔츄리를 삽입시킬수 도 있다. 엔츄리의 맨 앞에 #으로 막아 놓으면 마운트 안된다는 의미이다. 시스템 사용 중에 #으로 막아 놓는다 할지라도 당장 적용되어 해당 파일시스템 사용이 중지 된다는 의미는 아니다. 이미 해당 파일시스템의 마운트 정보가 부팅될 때 로드되어 있기 때문이다.

사용 중에 막고자 할 때에는 ‘umount’ 명령을 이용하여야 한다. 위에 있는 vfstab에서 사용자 파일시스템인 /u를 즉시 마운트 안되게 하려면 아래와 같이 해주면 된다. 그리고 ‘mount’란 명령을 이용하여 마운트 해제가 되었나 확인하여 보면 된다. ‘mount’ 명령은 현재 마운트 되어있는 파일시스템을 보여 준다.
[#] umount /u
[#] mount

/etc/mnttab 파일

또 다른 file system table로는 mnttab 파일이 있다. 이 파일은 현재 마운트 되어 있는 파일 시스템의 정보를 보여준다. mount 명령어에 의해 마운트된 디바이스들에 관한 정보를 가지고 있다.
[#/] cat /etc/mnttab
/dev/root / vxfs rw,suid 933221004
/dev/stand /stand bfs rw 933221005
/proc /proc proc rw 933221024
/dev/fd /dev/fd fdfs rw 933221024
/tmp /tmp memfs rw 933221066
/processorfs /system/processor processorfs rw 933223115
/var/tmp /var/tmp memfs rw 933223115
/dev/_tcp /dev/_tcp specfs rw 933223115
/dev/dsk/c0b0t1d0s1 /u vxfs rw,log,suid,mincache=closesync,noquota 933235359

mnttab 파일은 시스템 관리자에 의해 수정되어지는 파일이 아니라 mount나 umount 명령어에 의해 파일시스템이 마운트되거나 마운트 해제될 때마다 시스템에 의해 자동으로 갱신(update)된다.


















Filesystem 조작

시스템을 사용하다 보면 파일시스템을 변경하거나 새로 만들거나 하는 경우가 종종 있다. 파일시스템을 관리하는 명령어로는 mount, umount, mountall, umountall이 있다. 이외에도 파일시스템을 검사하고 복구해주는 fsck, 파일 시스템을 만들어 주는 mkfs, 구성되어 있는 파일시스템의 정보를 보는 fstyp등이 주로 사용된다. 보다 하단에 존재하는 파티션 정보를 보는 prtvtoc이란 명령어도 자주 사용된다.

mount 명령어

단순히 mount만 입력하였을 때에는 현재 사용되고 있는 시스템의 마운트 되어 있는 정보를 보여준다. 옵션도 같이 이용할 때에는 옵션에 따라 각각을 필요한 곳으로 마운트 시켜 사용할 수도 있다.
[#/] mount
/ on /dev/root read/write/setuid on 금요일 7월 2 09:59:07 1999
/stand on /dev/stand read/write on 금요일 7월 2 09:59:08 1999
/proc on /proc read/write on 금요일 7월 2 09:59:30 1999
/dev/fd on /dev/fd read/write on 금요일 7월 2 09:59:30 1999
/tmp on /tmp read/write on Thu Jul 29 13:04:26 1999
/system/processor on /processorfs read/write on 금요일 7월 2 09:59:34 1999
/var/tmp on /var/tmp read/write on Thu Jul 29 13:38:35 1999
/dev/_tcp on /dev/_tcp read/write on 금요일 7월 2 09:59:34 1999
/u on /dev/dsk/c0b0t1d0s1 read/write/log/setuid/mincache=closesync/noquota on T9
block special device mount point mount options mount time

옵션을 이용하는 경우에 관하여 알아보자.
[#] mount [-F FSType] special mount_point
-F FSType FSType는 지정된 파일시스템 이름을 주면 된다. 디스크의 경우는 보통 ufs
나 vxfs를 사용하며, CD-ROM의 경우 cdfs를 사용한다.
special 마운트 될 블록 디바이스 이름.
mount_point 마운트할 디렉토리 이름

mount 명령어를 활용하는 방법은 크게 두가지 경우로 구분할 수 있다. 첫 번째는 이미 부팅된 후에 ‘umount’ 명령어로 해당 파일시스템을 마운트 해제시켰을 때, 다시 마운트 하는 경우와, 또다른 경우는 부팅 할 때 마운트가 아예 안되어 부팅한 파일시스템이나, 시스템 사용 중에 파일시스템을 만든 경우가 있다.

첫번째 경우에 관하여 알아보자. 이미 vfstab에 마운트된 정보가 있으므로 단순히 아래와 같이 하여 주면 된다. 파일시스템 /u를 다시 마운트 한다고 하여보자.
[#] mount /u

두번째 경우는, 부팅되기 전에 #막혀 있을 수도 있으므로 해당 파일시스템에 관한 정보를 vfstab에서 미리 알 수 있다. 그리고 특정 디바이스를 특정 이름으로 마운트 시키고자 할 때 아래와 같이 사용하면 된다. /u 가 vxfs 타입의 파일시스템이라고 하자.
[#] mount –F vxfs /dev/dsk/c0b0t1d0s1 /u
[#] mount –F ufs /dev/dsk/c0b0t2d0s3 /user3

umount 명령어

마운트 되어 있는 파일시스템을 해제시킬 때 사용하는 명령어로 umountall과 달리 하나씩 해제 시킬 때 사용한다.
[#]umount /u

mountall 명령어

mountall 명령어는 /etc/vfstab 파일에 등록되어 있는 모든 파일시스템을 마운트 시킨다. 만일 파일시스템 테이블인 vfstab 파일에 없다면, /etc/dfs/dfstab 파일에서 찾아 마운트 시킨다. 보통 파일시스템을 마운트 하기 전에 마운트 하려는 파일시스템이 사용하기에 적절한지를 확인하기 위하여 sanity check이 fsck 명령어를 이용하여 행해진다. 만일 파일시스템에 이상이 있다면 fsck를 이용하여 파일시스템을 복구하고 마운트 시키나, 심각한 장애가 있거나 마운트 안되는 다른 원인이 남아 있다면 마운트가 되지 않는다. 이 명령어를 사용하는 사용자는 root 사용자 권한을 가진자 이어야 한다.
[#] mountall

umountall 명령어

umountall 명령어는 마운트되어 있는 모든 파일시스템을 해제시키는데 그 중에 root, /proc, /stand, 그리고 /dev/fd는 제외된다. 그 이유는 기본적으로 시스템이 동작될 수 있는 최소 필요 파일시스템들이기 때문이다.
[#] umountall

fuser 명령어

이 명령어를 사용할 때 주의를 하여야 한다. 사용중이라도 강제로 끊어버리기 때문에 꼭 필요한 경우가 아니면 사용하지 말아야 한다.

파일이나 파일시스템을 사용하는 프로세스들을 식별하는데 사용한다. 먼저 /home을 사용하는 모든 사용자를 제거하려면 다음과 같이 하면 된다. 가령choi 사용자는 28825 pid로 login되었다가 제거됨을 ‘ps –ef’로 확인할 수 있다.
[#/] fuser -ku /home
/home/admin:
/home/choi: 28825c(choi)
/home/ftp:
/home/jhpark:
/home/jjlee:

경우에 따라 전체 패스를 넣어주어야 한다(/home 대신 /home/choi 같이).

d1s1 디바이스에 관련된 모든 process들이 종료된다.
[#/] fuser -ku /dev/dsk/c0b0t0d1s1

임의의 사용자가 로그인한 pid를 확인할 수도 있는데, 다음은 choi 사용자가 login한 pid를 확인한 결과를 예로 들었다.
[#/] fuser -u /home/choi :
/home/choi: 28863c(choi)

다음과 같이 하면 /u를 사용중인 모든 사용자에 관하여 알 수 있다.
[#/] fuser -cu /u
/u: 10368cto(oracle) 10370cto(oracle) 10372cto(oracle) 10374cto(oracle)
10376cto(oracle) 10378cto(oracle) 16397c(root)

mount 해제가 안될 때

별 문제가 없다면 마운트가 해제되었다는 메시지를 볼 수 있을 것이고 누군가가 해당 파일시스템을 사용중이라면 다음과 같은 메시지가 나타난다.
[#/]umount /u
UX:umount: ERROR: /u busy

이럴 경우 어떤 사용자가 그 파일시스템을 사용하고 있는지를 알아보아야 한다. 표시되어 있는 사용자들이 현재 그 디렉토리로 들어가 있거나 오라클 같은 DB에서 사용하고 있다고 아래의 예제에서 나타나 있다. 이럴 경우 오라클을 다운시키고 사용중인 사용자에게 빠져 나오라고 하면 된다. 아니면 fuser 명령어를 이용하여 사용중인 파일시스템에 접속하여 있는 모든 사용자를 강제로 제거하여도 된다. 필요하다면 ‘kill’명령어로 아래에 나타난 프로세스를 하나씩 죽여 나가도 된다.
[#/] fuser -cu /u
/u: 10368cto(oracle) 10370cto(oracle) 10372cto(oracle) 10374cto(oracle)
10376cto(oracle) 10378cto(oracle) 16397c(root)

prtvtoc 명령어

주로 VTOC(volume table of Contents)과 관련된 정보를 보여주는 기능을 한다. 그 기능을 하나씩 살펴보자. 먼저 디스크 용량을 계산하여 보자.
[#/] prtvtoc -p /dev/rdsk/c0b0t0d0s0

Device /dev/rdsk/c0b0t0d0s0
device type: 4 (DPT_SCSI_HD)
cylinders: 1106 heads: 255
sectors/track: 63 bytes/sector: 512
number of partitions: 16 size of alts table: 2048
media stamp: "FgLEtNKxPmts

다음과 같이 하면 디스크 용량을 계산할 수 있다:
Cyl # x Hd # x S/T # x B/S # : 1106 x 255 x 63 x 512 = 9,097,159,680 Bytes = 8.675 GB

디스크의 bad sector를 확인하고자 할 때 다음과 같이 하면 된다.
[#/] prtvtoc -a /dev/rdsk/c0b0t0d0s0 : Bad sector 확인시
ALTERNATE SECTOR/TRACK MAPPING TABLE:
Bad Sector Start Alternate Sector Start Count
… …. …
15962 alternate sector(s) left for allocation.

디스크에 bad sector가 있다면 위에 관련된 값이 표시될 것이다.

fstyp 명령어

현재 설치되어 있는 디바이스중에서 파일시스템으로 만들어져 있는 슬라이스의 파일시스템 종류를 알고 싶을 때 사용하는 명령어가 fstyp 이다. 다음과 같이 사용하면 된다. 보다 자세한 정보를 알고 싶을때에는 “-v” 옵션을 같이 사용하면 된다.
[#/]fstyp /dev/rdsk/c0b0t1d0s1
vxfs

보다 자세한 정보를 알고 싶을때에는 “-v” 옵션을 같이 사용하면 된다.
[#/] fstyp -v /dev/dsk/c0b0t0d0s1
vxfs
magic a501fcf5 version 4 ctime Fri Jan 8 19:46:38 1999
logstart 0 logend 0 bsize 1024 size 3333487 dsize 3333487 ninode 0 nau 0
defiextsize 0 ilbsize 0 immedlen 96 ndaddr 10 aufirst 0 emap 0 imap 0 iextop 0 istart 0
bstart 0 femap 0 fimap 0 fiextop 0 fistart 0 fbstart 0 nindir 2048 aulen 32768 auimlen 0 auemlen 8
auilen 0 aupad 0 aublocks 32768 maxtier 15 inopb 4 inopau 0 ndiripau 0 iaddrlen 8
bshift 10 inoshift 2 bmask fffffc00 boffmask 3ff checksum dc0d4c7d
oltext1 26 oltext2 2050 oltsize 1 checksum2 924 free 2107290 ifree 2400
efree 980 889 897 458 418 297 189 124 70 55 38 35 21 9 4 11

fsck 명령어

파일시스템이 손상을 입었을 때, 사용자는 해당 파일시스템을 사용하지 못한다. 이러한 경우 먼저 시도할 일은 fsck 명령어를 이용하여 손상받은 파일시스템을 검사하고 복구하여 주는 일이다. 그러나 복구 안될 때도 있으므로 수시로 백업을 받아 두어야 한다. 평소에 어떤 파일시스템을 사용하고 있는지를 알고 있어야 한다.

아래에서 fstyp 대신 해당 파일시스템 타입(주로 vxfs나 ufs)을 적어주면 되고, 파일시스템 검사를 할 때 물어보는 질문에 응답을 yes로 받을지 no로 받을 지를 정해 준다. 보통 y를 받는다.
[#] fsck –F fstyp –y /dev/dsk/c0b0t0d1s1 : 응답을 yes로 받으라
[#] fsck –F fstyp –n /dev/dsk/c0b0t0d1s1 : 응답을 no로 받으라

아래에서 fstyp 대신 해당 파일시스템 타입(주로 vxfs나 ufs)을 적어주면 되고, 파일시스템 검사를
[#] fsck –F vxfs –y –o full /dev/dsk/c0b0t0d1s1 : 전체 파일시스템 검사

ulimit 명령어

이 명령어는 시스템의 자원을 설정하고 그 값을 알아보는데 사용된다. 명령어로 직접 값을 수정하면 시스템이 부팅되기 전까지 효력을 발휘한다. 영구적인 값 설정은 커널에서 대부분이 담당한다. 옵션–a는 모든 자원 정보를 보이라는 의미이다.
[#] ulimit –a [#]cat /etc/conf/cf.d/stune
time(seconds) unlimited HDATLIM 0x7fffffff
file(blocks) unlimited SDATLIM 0x7fffffff
data(kbytes) unlimited HVMMLIM 0x7fffffff
stack(kbytes) 16384 SVMMLIM 0x7fffffff
memory(kbytes) unlimited HFSZLIM 0x7fffffff
coredump(blocks) 32768 SFSZLIM 0x7fffffff
nofiles(descriptors) 1024 HFNOLIM 1024
vmemory(kbytes) unlimited SFNOLIM 1024

file(blocks)에서 unlimited는 커널의 FSZLIM 값이 0x7fffffff로 무한대란 의미로 설정되어 있기 때문이다. data는 DATLIM과 관련이 있고, vmemory는 VMMLIM과 연관이 있고, nofiles는 FNOLIM과 관련이 있다.
서버에 요청 중입니다. 잠시만 기다려 주십시오...