블로그 이미지
인터넷 해외선교를 기본으로 하는 개인적 내용과 학점은행제 관련한 것을 한꺼번에 남겨볼께요. 항상 행.복.하시길~ 주문처럼 외우는 엠토리가 운영하는 블로그입니다
엠토리

공지사항

최근에 올라온 글

최근에 달린 댓글

글 보관함

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

[디스크 관리]

1. 마운트에 대해서 이해한다.
2. 리눅스에서 cdrom, 하드디스크 사용법을 익힌다.

<마운트 와 언마운트>
리눅스는 모든 것을 파일로 간주한다. 하드디스크, CDROM 드라이브도 하나의 장치파일(Device File)로 간주한다.
사용자 입장에서는 하드디스크 장치파일을 통해서 데이타를 접근할 수 없고 장치파일을 디렉토리에 연결하는 작업(마운트)을 통해서 데이타에 접근할 수 있다.

마운트   : 파일시스템(장치)을 디렉토리에 연결하는 작업
           명령어 - mount
언마운트 : 파일시스템(장치)을 디렉토리와 연결해제 하는 작업
           명령어 - umount(unmount 가 아님)

//////////////////////////////////////////////////////////////////////////
eject  :  cdrom 을 마운트해제후 배출해 준다.

#man  eject

EJECT(1)                              User Commands                             EJECT(1)

NAME
       eject - eject removable media

SYNOPSIS
       eject -h
       eject [-vnrsfqp] [<name>]
       eject [-vn] -d
       eject [-vn] -a on|off|1|0 [<name>]
       eject [-vn] -c slot [<name>]
       eject [-vn] -t [<name>]
       eject [-vn] -x <speed> [<name>]
       eject -V

DESCRIPTION
       Eject  allows  removable  media (typically a CD-ROM, floppy disk, tape, or JAZ or
       ZIP disk) to be ejected under software control.

//////////////////////////////////////////////////////////////////////////

▲마운트 및 언마운트 형식

mount  -t 파일시스템타입  장치파일  마운트디렉토리
(마운트 디렉토리는 임의로 지정 가능하다.)

umount  마운트디렉토리 또는 umount  장치명(/dev/hdc)

1) cd 마운트
mount  -t iso9660  /dev/cdrom  /mnt/cdrom
또는
mount  /dev/cdrom  /mnt/cdrom

cd 마운트 해제
umount  /mnt/cdrom 또는 umount /dev/hdc

2) floppy
mount  -t  vfat  /dev/fd0  /mnt/floppy

3) FAT(windows 98) or  NTFS
mount  -t vfat  -o  iocharset=cp949  /dev/hda1  /mnt/win98
mount  -t ntfs  -o  iocharset=cp949  /dev/hda1  /mnt/winnt

-o 는 옵션, cp949 는 한글 코드 설정

▲하드디스크(또는 CD-ROM Drive) 장치명

(E-IDE 또는 PATA)
primary     master   : /dev/hda (첫번째 IDE 하드디스크 또는 CD-ROM)
primary     slave     : /dev/hdb (두번째 IDE 하드디스크 또는 CD-ROM)
secondary  master   : /dev/hdc
secondary  slave     : /dev/hdd

(SCSI)
/dev/sda (첫번째 스카시 하드디스크)
/dev/sdb (두번째 스카시 하드디스크)
/dev/sdc
.....

SATA 방식의 하드디스크는 SCSI 로 리눅스에서 인식된다.

IDE,E-IDE : ATA, PATA
SATA      : Serial ATA
 
▲전송 인터페이스 
1. SASI: SCSI의 모태이다.
2. SCSI (스커지): 병행연산 버스의 원형이다.
3. ST-506(시게이트 인터페이스): 현재의 플로피 디스크를 제어하는 것과 동일한 MFM 방식이다.
4. ST-412(시게이트 인터페이스): MFM 방식에 RLL 압축 기술을 적용하여 용량을 늘렸다. ST-506를 개량한 것이다.
ESDI: ST-412/506에 비해 동작 속도가 급격히 빨라졌지만, 이전의 규격들과 호환되지 않는다.
5. ATA: 초기의 병렬 방식인 ATA와 2003년에 개발된 직렬방식인 SATA가 있다.
 
출처 : http://ko.wikipedia.org

//////////////////////////////////////////////////////////////////////////
참조)
http://ko.wikipedia.org/wiki/%ED%95%98%EB%93%9C_%EB%94%94%EC%8A%A4%ED%81%AC
http://wiki.kldp.org/Translations/html/SysAdminGuide-KLDP/x798.html

//////////////////////////////////////////////////////////////////////////

▲자동 마운트 설정파일
#cat  /etc/fstab
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/home             /home                   ext3    defaults        1 2
LABEL=SWAP-sda2         swap                    swap    defaults        0 0
/dev/fd0                /media/floppy           auto    pamconsole,exec,noauto,managed 0 0
/dev/hdc                /media/cdrom       auto    pamconsole,exec,noauto,managed 0 0

---> cdrom 의 경우  리눅스 종류 또는 vmware 버전에 따라서 /media/cdrecorder 로 나타나는 경우도 있다.

▲/etc/fstab : 자동마운트 설정파일의 형식

1)장치명 또는 파티션 레이블(LABEL)
2)마운트할 디렉토리
3)파일 시스템 형식
4)옵션
5)덤프값 : dump 라는 프로그램으로 덤프여부, ext3 는 1, 다른 파티션은 0
6)파일시스템점검순서 : 루트파티션(ext3)은 1, 다른 파티션(ext3)은 2, 그 외 파티션은 0

[cent]
//////////////////////////////////////////////////////
#df -h 했을 때
/dev/hdc              636M  636M     0 100% /media/cdrom
라인이 출력되면
#eject
명령 실행후 실습하기
//////////////////////////////////////////////////////

df : Disk Free, 하드디스크 파티션별 사용량 출력 명령
     -h 옵션을 주면 메가바이트, 기가바이트로 출력되고
     옵션을 주지 않으면 킬로바이트 단위로 출력된다.

▲cd 자동 마운트
가상머신 오른쪽 하단 cdrom 아이콘에 마우스 커서를 위치시키고 회색으로 되어 있으면 왼쪽마우스를 누른후 "connect" 를 누른다.(녹색 LED 표시가 나오도록 설정)
cdrom 아이콘을 더블클릭한 후 use iso image 선택하고 browse 버튼 눌러서 centos 1번 cd 파일(확장자 iso) 을 지정해 준다.
질문 창이 나오면 yes 를 선택한다.
실제 컴퓨터에서 데이타 cd 를 cdrom 드라이브에 넣는 것과 같다.

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.7G  2.8G  2.7G  52% /
/dev/shm              125M     0  125M   0% /dev/shm
/dev/sda3             1.6G   90M  1.5G   6% /home
/dev/hdc              630M  630M     0 100% /media/cdrom ---> 자동 마운트된 cd
/media/cdrecorder 에 마운트 되는 경우도 있는데 이 때는
/media/cdrecorder 디렉토리를 찾아가야 cd 의 내용이 보인다.

//////////////////////////////////////////////////////
프로그램 오동작으로 인하여 자동마운트 안 되는 경우도 있는데 이 때는

1)가상머신 cdrom 아이콘 클릭해서 Use physical drive 선택후 OK 한 후 다시 iso 파일을 선택해서 해 본다.
2)리부팅 해서 다시 해 본다.
3)
#eject
#mount  /media/cdrom 또는 mount /media/cdrecorder
해 본다.
//////////////////////////////////////////////////////

#cd  /media/cdrom 또는 #cd /media/cdrecorder
#pwd
/media/cdrom
#ls
CentOS  RELEASE-NOTES-en.html  centosdocs-man.css  isolinux
GPL     RPM-GPG-KEY            headers             repodata
NOTES   RPM-GPG-KEY-centos4    images              yumgroups.xml
---> cd 의 내용이 출력 된 것.

#cp  RELEASE*  /work
---> cd 에 있는 파일을 하드디스크 /work 디렉토리로 복사
#cd  /work
#ls
#cat  RELEASE*

#umount   /media/cdrom 또는 #umount /media/cdrecorder
---> 마운트 해제(cd 를 꺼내려면 마운트 해제를 해야 한다.)
busy 라고 나오면 다른 디렉토리로 이동후 해제하면 된다.

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.7G  2.8G  2.7G  52% /
/dev/shm              125M     0  125M   0% /dev/shm
/dev/sda3             1.6G   90M  1.5G   6% /home

<cd 수동 마운트>
[cent]
▲자동마운트 해제하기
(리눅스 가상머신에서 작업하기)
위쪽 메뉴표시줄-프로그램-환경설정-이동식 저장장치

이동식 디스크 항목
[ ]"(cdrom 같은)꺼낼수 있는 미디어가 들어오면 마운트" 체크해제 - 닫기 버튼 클릭
--->위에서 두번째 항목

#df -h
cdrom(/dev/hdc) 이 출력되지 않아야 한다.

리눅스 가상머신 cdrom 아이콘 더블 클릭해서 centos 2번 cd 입력하고 자동마운트 되는지 확인

#df  -h
---> 자동마운트되지 않는다.


#ls  /mnt
#mkdir  /mnt/mycd (cd 를 수동 마운트할 디렉토리 생성)
#ls  /mnt

#mount  -t iso9660  /dev/cdrom  /mnt/mycd
mount: block device /dev/cdrom is write-protected, mounting read-only
또는
#mount  /dev/cdrom  /mnt/mycd

#ls /dev/h*
/dev/hdc (---> cdrom 드라이브 장치파일)
#ll /dev/cdrom
lrwxrwxrwx  1 root root 3  2월 12  2009 /dev/cdrom -> hdc
---> /dev/cdrom 은 심볼릭 링크 파일이다.

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.7G  2.8G  2.7G  51% /
/dev/shm               98M     0   98M   0% /dev/shm
/dev/sda3             1.6G   90M  1.5G   6% /home
/dev/hdc              630M  630M     0 100% /mnt/mycd

#cd /mnt/mycd
#pwd
/mnt/mycd

#ls
CentOS  GPL  RPM-GPG-KEY
---> 2번 cd 의 내용이 출력된다.

#ls  /media/cdrom
---> 자동 마운트에 사용된 디렉토리는 비어 있음

▲마운트 해제 하기
리눅스에서는 cdrom 이 마운트되면 cdrom 드라이브의 "꺼내기(Eject)" 버튼을 눌러도 CD 가 배출되지 않으며 마운트해제를 해야 배출된다.

#pwd
(/mnt/mycd)
#ls
CentOS  GPL  RPM-GPG-KEY

#umount   /mnt/mycd (마운트 해제하기)
umount: /mnt/mycd: device is busy
umount: /mnt/mycd: device is busy

--->busy 로 나오면 다른 디렉토리로 이동후 마운트를 해제하거나
    fuser 로 프로세스를 확인후 프로세스를 강제 종료후 마운트 해제 할 수 있다.

#fuser  -u  /mnt/mycd
fuser  파일시스템 사용자 출력
-u 사용자 계정 출력
---> fuser 로 보았을 때 프로세스가 보이면 마운트 해제시 busy 로 나타나고 마운트 해제가 안 된다.

c 현재(current) 디렉토리로 파일을 사용한다는 의미

//////////////////////////////////////////////////////////////////////////
#man fuser
NAME
       fuser - identify processes using files or sockets

 c      current directory.
//////////////////////////////////////////////////////////////////////////

#cd
#pwd
/root
#fuser  -u  /mnt/mycd
/mnt/mycd:

#umount  /mnt/mycd

//////////////////////////////////////////////////////////////////////////
(참고)
다른 디렉토리로 이동해서도 마운트 해제가 안 되면
#fuser  -k  /mnt/mycd
#umount   /mnt/mycd
해 본다.

fuser  -k 는 /mnt/mycd 에 남아있는 프로세스를
강제 종료하는 명령어와 옵션(-k : kill 옵션)
//////////////////////////////////////////////////////////////////////////

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.7G  2.8G  2.7G  51% /
/dev/shm               98M     0   98M   0% /dev/shm
/dev/sda3             1.6G   90M  1.5G   6% /home

#ls  /mnt/mycd
---> 마운트가 해제되었으므로 출력되는 내용이 없다.

#mount  /media/cdrom 또는 #mount /media/cdrecorder
---> 자동 마운트 설정 파일인 /etc/fstab 에 마운트 정보가 있을 경우
"mount  마운트디렉토리"  형식으로 이용 가능하다.

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.7G  2.8G  2.7G  51% /
/dev/shm               98M     0   98M   0% /dev/shm
/dev/sda3             1.6G   90M  1.5G   6% /home
/dev/hdc              630M  630M     0 100% /media/cdrom

#eject (마운트 해제와 cd 배출을 한꺼번에 해 준다.)
#df  -h
(cdrom 이 마운트 해제 된 것을 확인 할 수 있다.)

#mount  /mnt/mycd
mount: can't find /mnt/mycd in /etc/fstab or /etc/mtab
---> /mnt/mycd 정보가 /etc/fstab 에 없으므로 마운트되지 않는다.

/etc/fstab  :  자동마운트 설정 정보 파일
/etc/mtab  :  현재 마운트된 정보를 저장하고 있는 파일

/media/cdrom : 자동마운트 프로그램이 이용하는 디렉토리
/mnt/mycd     : 수동마운트에 사용한 디렉토리

<디스크 관리>
새로운 하드디스크를 추가하기 위해서 리눅스 가상머신을 종료한다.
(리눅스 가상머신이 부팅 된 상태에서는 가상 하드디스크 추가가 안 된다.)

[cent]
#poweroff

▲IDE 방식 200M 가상 하드디스크 2개 추가하기
1) vmware 메뉴표시줄-VM-Settings
2) Add-Hard Disk-Next
3) Create a new virtual disk 선택(첫번째 버튼)-Next
4) Virtual disk type : IDE 선택-Next
5) Disk Capacity-0.2 로 설정-Next
6) Disk file(가상하드디스크 저장 파일명, 디폴트값 그대로 사용)-finish
8) OK

하드디스크 추가후 Linux 부팅시키기

dmesg : 부팅시 커널이 발생한 메시지 출력 명령

#dmesg
#dmesg  |  grep sd
#dmesg  |  grep hd
---> 부팅시에 커널이 하드웨어 인식한 것을 알 수 있다.

//////////////////////////////////////////////////////
결과 캡춰
#dmesg | grep sd
SCSI device sda: 16777216 512-byte hdwr sectors (8590 MB)
sda: cache data unavailable
sda: assuming drive cache: write through
SCSI device sda: 16777216 512-byte hdwr sectors (8590 MB)
sda: cache data unavailable
sda: assuming drive cache: write through
 sda: sda1 sda2 sda3
Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
EXT3 FS on sda1, internal journal
EXT3 FS on sda3, internal journal
Adding 522104k swap on /dev/sda2.  Priority:-1 extents:1

#dmesg | grep hd
    ide0: BM-DMA at 0x1070-0x1077, BIOS settings: hda:DMA, hdb:pio
    ide1: BM-DMA at 0x1078-0x107f, BIOS settings: hdc:DMA, hdd:pio
hda: VMware Virtual IDE Hard Drive, ATA DISK drive
hdc: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive
hda: max request size: 128KiB
hda: 417792 sectors (213 MB) w/32KiB Cache, CHS=414/16/63, UDMA(33)
hda: cache flushes not supported
 hda: unknown partition table
hdc: ATAPI 1X CD-ROM drive, 32kB Cache, UDMA(33)
SCSI device sda: 16777216 512-byte hdwr sectors (8590 MB)
SCSI device sda: 16777216 512-byte hdwr sectors (8590 MB)

//////////////////////////////////////////////////////

<하드디스크 작업 순서>
1. 물리적 부착
2. fdisk 로 파티션 생성
3. mkfs.ext3 로 포맷하기
4. 마운트해서 사용하기

▲fdisk 명령어
fdisk  /dev/장치명

▲fdisk 내부에서 사용하는 명령어
a : 부트 플래그 설정
l : 파티션 목록(list)
n : 새 파티션 생성(new)
t : 파티션 변경(toggle,change)
w : 저장(write)
p : 파티션 출력(print)
q : 종료(quit)
d : 삭제(delete)

▲파일시스템 생성(포맷 개념)
1) mkfs.ext3  /dev/hda1
2) mkfs  -t  ext3  /dev/hda1

mkfs ---> make filesystem

▲마운트 형식
mount  -t  ext3  /dev/hda1  /disk2
(-t ext3 는 생략 가능)

#ls /dev/h*
/dev/hda(새로 부착한 하드디스크) /dev/hdb /dev/hdc (CDROM 드라이브)

#fdisk -l
-l(list)

Disk /dev/hda: 213 MB, 213909504 bytes
16 heads, 63 sectors/track, 414 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

Disk /dev/hda doesn't contain a valid partition table

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         765     6144831   83  Linux
/dev/sda2             766         830      522112+  82  Linux swap / Solaris
/dev/sda3             831        1044     1718955   83  Linux

Id 83 은 리눅스 데이타 파티션을 의미하고
Id 82 는 리눅스 스왑 파티션을 의미한다.

수업용 하드디스크 구분:

[/dev/sda]              [/dev/hda]              [/dev/hdb]
첫번째 하드디스크    두번째 하드디스크     세번째 하드디스크
(부트디스크)

#fdisk  /dev/hda
Command (m for help): m 입력

 p   print the partition table

Command (m for help): l(엘) 입력
파티션 종류 출력

Command (m for help): n(파티션 새로 생성)
Command action
   e   extended
   p   primary partition (1-4)
주파티션은 1-4번이고
5번 부터는 확장파티션 안의 논리파티션(logical partition)이다.

주파티션   : primary partition(4개 까지 가능)
확장파티션 : extended partition
논리파티션 : logical partion(번호가 5번 부터 할당)

파티션을 5개 이상 만드려면
확장파티션을 만들고 그 안에 논리 파티션을
만들어야 한다.
최대 파티션 수는 16개 이다.
(주파티션 3개 + 확장 파티션 1개 + 논리 파티션 12개)

[주파티션1 | 주파티션2 | 주파티션3 | 확장파티션(논리파티션5 | 논리파티션6 ...)]

p (엔터)
Partition number (1-4): 1
First cylinder (1-414, default 1): 엔터
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-414, default 414):+100M
(총 200M 에서 100M 만 할당)
+ 를 생략하면 실린더수로 인식 됨

실린더가 모여서 파티션을 이룬다.

Command (m for help): p

Disk /dev/hda: 213 MB, 213909504 bytes
16 heads, 63 sectors/track, 414 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1         195       98248+  83  Linux

Command (m for help):

Command (m for help): w(저장후 종료)
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

#ls /dev/h*
/dev/hda  /dev/hda1(두번째 하드디스크 첫번째 파티션 장치파일)  /dev/hdb  /dev/hdc

실습용 리눅스 가상머신의 하드디스크 구분 :
/dev/sda : 첫번째 하드디스크(부트디스크)
/dev/hda : 두번째 하드디스크
/dev/hdb : 세번째 하드디스크

#fdisk -l
#fdisk -l(엘) /dev/hda

Disk /dev/hda: 213 MB, 213909504 bytes
16 heads, 63 sectors/track, 414 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1         195       98248+  83  Linux

#mkfs.ext3  /dev/hda1
(파일시스템 생성하기-윈도우의 포맷개념)

mke2fs 1.37 (21-Mar-2005)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
24576 inodes, 98248 blocks
4912 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
12 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

#mkdir /disk2

#mount  /dev/hda1  /disk2
또는
#mount  -t  ext3  /dev/hda1  /disk2
-t ext3 는 생략가능

#cat  /etc/filesystems
---> 자주 사용되는 파티션 타입은 파일에 저장되어 있으므로
       마운트시에 타입을 생략할 수 있다.

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.7G  2.8G  2.7G  51% /
none                   98M     0   98M   0% /dev/shm
/dev/sda3             1.6G   90M  1.5G   6% /home
/dev/hda1              93M  5.6M   83M   7% /disk2

#df -T(파티션 타입 출력)
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
/dev/sda1     ext3     5952252   2849676   2795336  51% /
none         tmpfs       99464         0     99464   0% /dev/shm
/dev/sda3     ext3     1665032     91580   1487508   6% /home
/dev/hdc   iso9660      645032    645032         0 100% /media/cdrom
/dev/hda1     ext3       95139      5664     84563   7% /disk2

--->cdrom 까지 마운트되어 있을 때 캡춰한 결과

/dev/shm 은 램디스크(Ram Disk, 메모리를 가상의 디스크로 사용)와
유사한 것으로 커널이 메모리를 마운트해서 사용하는 것이다.
크기는 메모리의 0.5 배로 기본 설정된다.
tmpfs 는 임시 파일 시스템(temporary filesytem)을 의미한다.

#cd /disk2
#pwd
/disk2

#ls
lost+found
---> 파일시스템 체크시 고아노드(문제가 생긴 파일)가 저장되는 곳

(vi 로 파일을 생성해도 된다.)
#cat  >  test.txt  (> 는 "출력 리다이렉션" 이라고 부른다.)
apple
orange
mango
ctrl+d 입력 : 입력 종료 단축키

#ls
lost+found  test.txt
#cat   test.txt
appple
orange
mango

<파티션 삭제, 타입 변경 테스트>

다른 디렉토리로 이동후 /disk2(/dev/hda1) 마운트 해제 하기
(#umount  /disk2)
파티션 작업을 할 때는
#fdisk  /dev/hda1 으로 하면 안되고
#fdisk  /dev/hda 로 실행해야 한다.

▲실습
두번째 하드디스크(/dev/hda) 남은 용량을 파티션 설정하고
포맷한 후 /disk2_2 디렉토리에 마운트 테스트하기
(주의 : /dev/hda1 을 마운트 해제한 후 작업해야 함,
마운트 해제를 하지 않으면 장치 파일이 생성되지 않는다.)

fdisk 사용시)
파티션 생성 : n
파티션 삭제 : d
파티션 저장 : w
파티션 출력 : p
메뉴 출력   : m

//////////////////////////////////////////////////////

#cd
#pwd
(/root)
#umount /disk2

#fdisk /dev/hda

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (196-414, default 196):
Using default value 196
Last cylinder or +size or +sizeM or +sizeK (196-414, default 414):
Using default value 414

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

#mkfs.ext3  /dev/hda2
#mkdir /disk2_2
#mount /dev/hda2 /disk2_2
#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.8G  2.2G  3.4G  39% /
none                   98M     0   98M   0% /dev/shm
/dev/sda3             1.7G   35M  1.5G   3% /home
/dev/hda2             105M  5.6M   94M   6% /disk2_2
//////////////////////////////////////////////////////

[파일시스템 체크 및 복구]

1. 리눅스 파티션 구조를 이해한다.
2. fsck 사용법을 익힌다.
3. 디스크 쿼타(Quota) 설정법을 익힌다.

☞파일 시스템(File System)
자료(data)를 저장하고 찾기 쉽도록 만들어 놓은 방법, 체계적인 구조

☞파일시스템의 종류
FAT  : windows 구버전(windows 98)이 사용
NTFS : windows 2000 이상이 사용
ext2 : 구버전 리눅스가 사용
ext3 : 현재의 리눅스가 사용
UFS  : 유닉스가 사용(솔라리스)

☞저장단위
0,1 : bit
8 bit : 1 byte
1 KB(Kilo byte) : 1,024 byte  = 10^3(10의 3승)
1 MB(Mega byte) : 1,024 Kbyte = 10^6(10의 6승)
1 GB(Giga byte) : 1,024 Mbyte = 10^9(10의 9승)

☞블록(block) : 데이타를 묶어서 처리하는 단위(예 : 512 byte)

☞하드디스크 용량 계산 :
트랙수 X 섹터수 X 면수 X 바이트
(실린더수와 트랙수는 동일)

☞리눅스 파일 시스템 구조

[ /dev/sda1 | /dev/sda2 | /dev/sda3 ]

      ^
      |
      |
-------------------------------------------------------
[VTOC][First Group][Second Group][ ... Group]
-------------------------------------------------------
              ^
              |
       |
☞각 Group 의 구조
[수퍼블록(백업수퍼블록)][실린더그룹][아이노드테이블][데이터블록]

☞VTOC(Volume Table Of Contents)
디스크 라벨(Label)
첫번째 섹터(512 바이트)에 존재하며, 파티션 정보를 포함

☞Primary Super Block
데이터 블록의 갯수
실린더 그룹의 갯수
데이터 블록의 크기 및 조각(Fragment)
마운트 정보
파일시스템 정보

☞Cylinder Group Block
아이노드의 갯수
디렉토리 갯수
실린더 그룹 내의 사용하지 않는 블록, 아이노드 갯수

☞Inode Table
파일의 종류와 접근모드(rwx)
파일의 UID, GID
파일의 접근시간, 수정시간 ,아이노드 변경시간
데이터 저장에 사용된 총 데이터 블록수
데이터 저장된 블록에 대한 포인터
총15개의 데이터 블록 포인터(주소정보)를 갖고 있다.
12 번재 포인터 까지는 아이노드가 실제 데이타를 가르킨다.
13 번째 포인터는 파일이 16MB 이하에 사용
14 번째 포인터는 32GB
15 번째 포인터는 70TB 까지 이론상 가능하지만
구조상 하나의 파일이 1TB 이상은 존재할 수 없다.

☞Data Block
데이터 블록의 기본 크기는 8192바이트(8KB)

참조)
http://gpvprasad.wordpress.com/interview-questions/embedded-interview-questions/

☞ext3 파일시스템은 ext2 와 구조는 같고 파일저장시 로그를
남기는 저널링 기능이 포함된 형태이다.

◐dumpe2fs : 파티션 논리적인 구조를 볼 수 있는 명령어

#dumpe2fs  /dev/sda3

dumpe2fs 1.35 (28-Feb-2004)
Filesystem volume name:   /home
Last mounted on:          <not available>
Filesystem UUID:          6b361661-6db7-4f63-a81c-da58b686f939
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index fil
etype needs_recovery sparse_super large_file
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              570080
Block count:              1138606
Reserved block count:     56930
Free blocks:              1110280
Free inodes:              570069
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      277
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         16288
Inode blocks per group:   509
Filesystem created:       Tue Feb  8 20:05:13 2011
Last mount time:          Tue Feb  8 11:50:40 2011
Last write time:          Tue Feb  8 11:50:40 2011
Mount count:              2
Maximum mount count:      -1
Last checked:             Tue Feb  8 20:05:13 2011
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal inode:            8
Default directory hash:   tea
Directory Hash Seed:      4c36ba93-e489-44ab-bd5a-6534c8cd0fc0
Journal backup:           inode blocks

Group 0: (Blocks 0-32767)
  Primary superblock at 0, Group descriptors at 1-1
  Block bitmap at 279 (+279), Inode bitmap at 280 (+280)
  Inode table at 281-789 (+281)
  23769 free blocks, 16277 free inodes, 2 directories
  Free blocks: 8999-32767
  Free inodes: 12-16288
Group 1: (Blocks 32768-65535)
  Backup superblock at 32768, Group descriptors at 32769-32769
  Block bitmap at 33047 (+279), Inode bitmap at 33048 (+280)
  Inode table at 33049-33557 (+281)
  31962 free blocks, 16274 free inodes, 4 directories
  Free blocks: 33558-55295, 55312-65535
  Free inodes: 16303-32576
Group 2: (Blocks 65536-98303)
  Block bitmap at 65536 (+0), Inode bitmap at 65537 (+1)
  Inode table at 65538-66046 (+2)
  32257 free blocks, 16288 free inodes, 0 directories
  Free blocks: 66047-98303
  Free inodes: 32577-48864
Group 3: (Blocks 98304-131071)
  Backup superblock at 98304, Group descriptors at 98305-98305
  Block bitmap at 98583 (+279), Inode bitmap at 98584 (+280)
  Inode table at 98585-99093 (+281)
  31978 free blocks, 16288 free inodes, 0 directories
  Free blocks: 99094-131071
  Free inodes: 48865-65152
Group 4: (Blocks 131072-163839)
  Block bitmap at 131072 (+0), Inode bitmap at 131073 (+1)
  Inode table at 131074-131582 (+2)
  32257 free blocks, 16288 free inodes, 0 directories
  Free blocks: 131583-163839
  Free inodes: 65153-81440
Group 5: (Blocks 163840-196607)
  Backup superblock at 163840, Group descriptors at 163841-163841
  Block bitmap at 164119 (+279), Inode bitmap at 164120 (+280)
  Inode table at 164121-164629 (+281)
  31978 free blocks, 16288 free inodes, 0 directories
  Free blocks: 164630-196607
  Free inodes: 81441-97728
Group 6: (Blocks 196608-229375)
  Block bitmap at 196608 (+0), Inode bitmap at 196609 (+1)
  Inode table at 196610-197118 (+2)
  32257 free blocks, 16288 free inodes, 0 directories
  Free blocks: 197119-229375
  Free inodes: 97729-114016
Group 7: (Blocks 229376-262143)
  Backup superblock at 229376, Group descriptors at 229377-229377
  Block bitmap at 229655 (+279), Inode bitmap at 229656 (+280)
  Inode table at 229657-230165 (+281)
  31978 free blocks, 16288 free inodes, 0 directories
  Free blocks: 230166-262143
  Free inodes: 114017-130304
Group 8: (Blocks 262144-294911)
  Block bitmap at 262144 (+0), Inode bitmap at 262145 (+1)
  Inode table at 262146-262654 (+2)
  32257 free blocks, 16288 free inodes, 0 directories
  Free blocks: 262655-294911
  Free inodes: 130305-146592
Group 9: (Blocks 294912-327679)
  Backup superblock at 294912, Group descriptors at 294913-294913
  Block bitmap at 295191 (+279), Inode bitmap at 295192 (+280)
  Inode table at 295193-295701 (+281)
  31978 free blocks, 16288 free inodes, 0 directories
  Free blocks: 295702-327679
  Free inodes: 146593-162880
Group 10: (Blocks 327680-360447)
  Block bitmap at 327680 (+0), Inode bitmap at 327681 (+1)
  Inode table at 327682-328190 (+2)
  32257 free blocks, 16288 free inodes, 0 directories
  Free blocks: 328191-360447
  Free inodes: 162881-179168

<디스크 장애 발생 및 복구>

fsck : 파일시스템 체크 및 복구 명령어(file system checker)

형식)
fsck  마운트디렉토리명 또는 fsck 장치명

#fsck 만 적고 tab 키를 두 번 눌러 본다.(명령어 자동완성 기능)
fsck     fsck.ext2     fsck.ext3

[root@cent ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              15G  4.5G  9.3G  33% /
none                  252M     0  252M   0% /dev/shm
/dev/sda3             4.3G   42M  4.1G   1% /home
/dev/hda1              93M  5.6M   83M   7% /disk2

#fsck  /dev/sda3

fsck 1.37 (21-Mar-2005)
e2fsck 1.37 (21-Mar-2005)
/dev/sda3 is mounted.

WARNING!!!  Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.

Do you really want to continue (y/n)? no
---> 마운트된 파티션을 체크하면 손상을 줄 수 있으므로 n 을 입력한다.

check aborted.

#umount  /home
[root@cent ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              15G  4.5G  9.3G  33% /
none                  252M     0  252M   0% /dev/shm
[root@cent ~]#

#fsck.ext3   /dev/sda3

e2fsck 1.37 (21-Mar-2005)
/dev/sda3: clean, 12/24576 files, 8774/98248 blocks

---> 파일시스템(파티션)이 문제가 없는 상태(clean)


<dd 를 이용하여 파티션의 수퍼블록 삭제하기>
//////////////////////////////////////////////////////////////////////////
#man  dd
NAME
       dd - 한 파일을 복사하는 동한 변환한다.
//////////////////////////////////////////////////////////////////////////

dd : convert and copy a file
1)dd 는 백업 명령어 중의 하나이다.
2)파티션을 복제할 때 사용할 수 있다.
3)수업에서는 수퍼블록을 삭제하는 용도로 사용함

The  default  ibs= and obs= sizes are specified as 512 bytes
if : input file
of : output file
/dev/zero : special file(지우개에 해당)
count : 횟수


A 디스크                     B 디스크
----------                     ----------
1번 파티션    ---->        1번 파티션
----------       dd           ----------

----------                     ----------
입력                           출력


◐dd 형식
dd  입력장치  출력장치  옵션
---> 입력장치에서 일정 크기만큼(디폴트는 1블록-512bytes) 데이타를 읽은 후 출력장치에 그대로 써준다.

☞파일시스템을 복구한 후 데이파 파일을 확인 할 수 있도록 예제 파일 만들기
#mount  /home
#cd  /home
#ls
#vi ddtest.txt
Linux Test

#cd
#umount  /home

--->dd 사용전 테스트 파일을 작성하고 마운트 해제하기
    dd 명령은 마운트 해제후 사용한다.

#dd  if=/dev/zero   of=/dev/sda3  bs=4096  count=20

count 옵션을 주지 않으면 파티션이 모두 삭제 된다.
count=20 에서 숫자를 다르게 지정해도 된다.

if : 입력장치
of : 출력장치
bs : 블록 사이즈(byte 단위)

---> /dev/zero 에서 읽은 후 /dev/sda3 에 쓰기 작업을 20번 반복하라는 의미
     즉, /dev/sda3 의 앞쪽 파티션 정보(수퍼블록)가 삭제된다.

//////////////////////////////////////////////////////////////////////////
#man  zero

null, zero - 데이터 소멸점(sink)

설명
       null나 zero 특수 파일에 쓴 데이터는 버려진다.

       null  특수 파일에서 읽으면 항상 EOF를 리턴하는 반면, zero에서 읽으면 항상 \0 문자를 리턴한다.
//////////////////////////////////////////////////////////////////////////


#mount  /dev/sda3  /home
mount: you must specify the filesystem type

---> dd 명령으로 인해 파티션이 손상되서 마운트되지 않는다.

#mount  -t  ext3  /dev/sda3  /home
mount: wrong fs type, bad option, bad superblock on /dev/sda3,
       or too many mounted file systems

◐수퍼블록(super block)
ext2 또는 ext3 파일 시스템에서 사용되는 주요 설정 정보들이
기록되어 있는 영역, 수퍼블록이 깨지면 마운트가 안되기
때문에 파티션 내부에 주기적으로 백업수퍼블록이 존재한다.

-----------------------------
primary super block

first backup super block
...

      backup super block
-----------------------------

[리눅스 파티션]

fsck.ext3 : 파일시스템 체크 및 수리 명령어

# fsck.ext3  /dev/sda3
안되면  #fsck  /dev/sda3  또는 -b 옵션을 이용해 본다.
#fsck.ext3  -b  32768  /dev/sda3 

e2fsck 1.35 (28-Feb-2004)
Couldn't find ext2 superblock, trying backup blocks...
Resize inode not valid.  Recreate<y>? yes

(질문이 나오면 엔터 또는 y 를 입력)

/home was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong for group #2 (32286, counted=32278).
Fix<y>? yes (y를 입력하거나 엔터를 입력)

Free blocks count wrong for group #11 (32286, counted=32278).
Fix<y>? yes

Free blocks count wrong (414144, counted=414128).
Fix<y>? yes

Free inodes count wrong for group #0 (15345, counted=15344).
Fix<y>? yes

Free inodes count wrong for group #2 (15360, counted=15352).
Fix<y>? yes

Directories count wrong for group #2 (0, counted=1).
Fix<y>? yes

Free inodes count wrong for group #11 (15360, counted=15352).
Fix<y>? yes

Directories count wrong for group #11 (0, counted=1).
Fix<y>? yes

Free inodes count wrong (215025, counted=215008).
Fix<y>? yes


/home: ***** FILE SYSTEM WAS MODIFIED *****
/home: 32/215040 files (0.0% non-contiguous), 15610/429738 blocks

fsck 검사 단계
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information

1단계 : 아이노드의 무결성 체크
         (아이노드 타입,아이노드 크기,형식 체크)
2단계 : 디렉토리의 무결성을 체크해서 bad inode 를 찾고 fix 한다.
3단계 : 디렉토리의 연결성 확인, lost+found 디렉토리를 fix 한다.
4단계 : 아이노드에서 link count 를 fix 한다.
         (잘못된 링크 카운트를 바로 잡는다.)
5단계 : 그룹요약정보를 체크한다.


#mount  /dev/sda3  /home
#cd  /home
#ls
#cat ddtest.txt

---> 파티션이 복구되어서 정상적으로 마운트가 되고 자료파일에 접근할 수가 있다.

//////////////////////////////////////////////////////////////////////////
#man  fsck
이름
       fsck - 리눅스 화일 시스템을 점검하고 수리한다.
.........

참고
       fstab(5), mkfs(8), fsck.minix(8), fsck.ext2(8) 또는 e2fsck(8), fsck.xiafs(8).

#man  fsck.ext2
NAME
       e2fsck - check a Linux ext2/ext3 file system

SYNOPSIS
       e2fsck  [  -pacnyrdfkvstDFSV  ]  [  -b  superblock  ]  [  -B  blocksize  ] [ -l|-L
       bad_blocks_file ] [ -C fd ] [ -j external-journal ] [ -E extended_options ] device

-b superblock
              Instead of using the normal superblock, use an alternative superblock spec-
              ified by superblock.   This  option  is  normally  used  when  the  primary
              superblock  has  been  corrupted.  The location of the backup superblock is
              dependent on the filesystem’s blocksize.  For filesystems  with  1k  block-
              sizes, a backup superblock can be found at block 8193; for filesystems with
              2k blocksizes, at block 16384; and for 4k blocksizes, at block 32768.
(수퍼 블록의 위치를 수동으로 지정할 때 사용하는 옵션)

-y     Assume an answer of ‘yes’ to all questions; allows e2fsck  to  be
              used non-interactively.

(질문이 많이 나올 때는 #fsck.ext3  -y  /dev/sda3 하면 된다.)
//////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////
#man  mount
이름
       mount - 화일 시스템 마운트

       mount 명령의 기본적인 사용법은
              mount -t type device dir

       -t vfstype
              -t 다음에 쓰이는 인수는 화일 시스템의 유형을 지시한다.  현재 지
              원되고 있는 화일 시스템 유형은 linux/fs/filesystems.c 에 적혀있
              다: minix, ext, ext2, xiafs, hpfs, fat,  msdos,  umsdos,  vfat,
              proc, nfs, iso9660, smb, ncp, affs, ufs, sysv, xenix, coherent.
              마지막 3 개는 같은 것이며 xenix 와 coherent 는 조만간 사라질 것
              이다.  sysv 을 사용하라.

              iso9660  은 기본 설정치이다. 만약 -t 옵션 다음에 다른 것이 주어
              지거나 또는 auto 라고 명시되면 화일 시스템의 수퍼블럭을 조사 하
              게   된 다.  (minix, ext, ext2, xia, iso9660 이 지원되고 있음).
              만약 조사가 실패하고 /proc/filesystems 이 존재한다면, "nodev"라
              고 적힌 것을 제외한 모든 화일 시스템을 조사하게 된다.  (예를 들
              어, proc 와 nfs).

예를 들어, 다음과 같이 한다고 치자:
       mount -a -t nomsdos,ext
이 명령은 msdos 와 ext 을 제외한 모든 화일 시스템을 마운트한다.

-o     -o 플래그 뒤에 콤마로 분리한 옵션을 적어준다. 
       이들 중   몇 몇 은 /etc/fstab  화일에서만 사용할 수 있다.
       다음 옵션들은 마운트될 어떤 화일 시스템에서든 사용할 수
       있는 것이다:

defaults
        다음과 같은 기본 옵션을 사용하게 한다:  rw,  suid,  dev,
        exec, auto, nouser, and async.

suid         set-UID, set-GID 가 효력을 발휘할 수 있게 해준다.
nosuid      set-UID, set-GID 를 무시하게 한다.
dev          화일 시스템 상의 문자, 블럭 특수 장치를 해석한다.
exec        바이너리의 실행은 허가한다.
auto        -a 옵션으로 마운트 가능하게 한다.
nouser     일반 사용자( 즉, 루트 아닌 )가 마운트할 수 있도록 허용하지  않는다.
              기본 설정치이다.
async       화일 시스템에 대한 I/O가 비동기적으로 이뤄지도록 한다.
remount   이미 마운트된 화일 시스템을 다시 마운트한다.

//////////////////////////////////////////////////////////////////////////


◐실습
리눅스를 종료한 다음 SCSI 방식으로 100M 하드디스크를 추가하고 부팅하기
100M 하드디스크를 파티션 설정하고 포맷한 다음 마운트 테스트한 후 마운트 해제하기
#fdisk  /dev/sdb
n
p
1
enter
enter
w
#fdisk  -l
#mkfs.ext3  /dev/sdb1
#mkdir  /new
#mount  /dev/sdb1  /new
#df  -h
#ls  /new
#umount  /new

위의 디스크를 dd 이용하여 수퍼블록 삭제하고
fsck 이용하여 복구한 후 마운트 테스트하기
(cent공용 을 이용해도 됨)


<디스크 쿼타(Quota)>

사용자별로 하드디스크 사용량을 제한하는 기능

---> 쿼타를 지정하지 않으면 일반계정이 파티션의 남은 용량을 다 사용할 수도 있기 때문에 실제 서버에서는 하드디스크 사용량 제한 설정을 해 준다.

1. /etc/fstab 파일을 열고 쿼타를 지정할 파티션 라인의 defaults 다음에 ,usrquota,grpquota 추가

(수업에서는 /home 에 지정)
--->defaults 와 usrquota 사이에 공백이 있으면 안 됨
--->/home 파티션이 없는 경우 / 파티션에 지정하기

usrquota : 사용자별 쿼타
grpquota : 그룹별 쿼타

student 그룹의 멤버 : apple, banana, candy 일 때
[student  group(10M)]=[apple(5M), banana(3M), candy(2M)]

사용자 쿼타는 사용자별로 용량을 제한하는 것이고 그룹 쿼타는 그룹의 멤버 사용자들의 용량을 합하여 그룹의 용량으로 제한 하는 것임


//////////////////////////////////////////////////////////////////////////

#vi  /etc/fstab
# This file is edited by fstab-sync - see 'man fstab-sync' for details
LABEL=/                 /                       ext3    defaults        1 1
/dev/devpts             /dev/pts                devpts  gid=5,mode=620  0 0
/dev/shm                /dev/shm                tmpfs   defaults        0 0
LABEL=/home             /home                   ext3    defaults,usrquota,grpquota(--->공백없이 단어추가)        1 2
/dev/proc               /proc                   proc    defaults        0 0
/dev/sys                /sys                    sysfs   defaults        0 0
LABEL=SWAP-sda2         swap                    swap    defaults        0 0
/dev/fd0                /media/floppy           auto    pamconsole,exec,noauto,managed 0 0
/dev/hdc                /media/cdrom            auto    pamconsole,exec,noauto,managed 0 0

//////////////////////////////////////////////////////////////////////////

2. 파티션을 리마운트 하거나 리부팅 하기
mount
mount  -o  remount  /home
mount 로 확인

#mount (현재 마운트되어 있는 정보 출력)
/dev/sda1 on / type ext3 (rw)
/dev/proc on /proc type proc (rw)
/dev/sys on /sys type sysfs (rw)
/dev/devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/shm on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
automount(pid1602) on /misc type autofs (rw,fd=4,pgrp=1602,minproto=2,maxproto=4)
automount(pid1649) on /net type autofs (rw,fd=4,pgrp=1649,minproto=2,maxproto=4)
/dev/hdc on /media/cdrom type iso9660 (ro,nosuid,nodev,_netdev)
/dev/sda3 on /home type ext3 (rw)

#cat  /etc/mtab (마운트 테이블 파일)

////////////////////////////////////////////////////////////////

Viewing /etc/mtab
The file /etc/mtab is a normal file that is updated by the mount program whenever file systems are mounted or unmounted. Here is a sample /etc/mtab:

/dev/sda3 / ext3 rw 0 0
none /proc proc rw 0 0
usbdevfs /proc/bus/usb usbdevfs rw 0 0
/dev/sda1 /boot ext3 rw 0 0
none /dev/pts devpts rw,gid=5,mode=620 0 0
/dev/sda4 /home ext3 rw 0 0
none /dev/shm tmpfs rw 0 0
automount(pid1006) /misc autofs rw,fd=5,pgrp=1006,minproto=2,maxproto=3 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
 

Each line represents a file system that is currently mounted and contains the following fields (from left to right):


The device specification

The mount point

The file system type

Whether the file system is mounted read-only (ro) or read-write (rw), along with any other mount options

Two unused fields with zeros in them (for compatibility with /etc/fstab)

////////////////////////////////////////////////////////////////

---> #cat  /etc/mtab 또는 #mount  를 통해 현재 마운트된 정보를 확인할 수 있다.

#mount  -o  remount  /home
(리부팅하지 않고 파티션을 재마운트하기)
---> 위의 명령이 실행 안 되면
umount  /home
mount  /home
한 후 다시 리마운트를 해 본다.
또는 /etc/fstab 의 철자를 확인해 본다.

#mount
/dev/sda1 on / type ext3 (rw)
/dev/proc on /proc type proc (rw)
/dev/sys on /sys type sysfs (rw)
/dev/devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/shm on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
automount(pid1602) on /misc type autofs (rw,fd=4,pgrp=1602,minproto=2,maxproto=4)
automount(pid1649) on /net type autofs (rw,fd=4,pgrp=1649,minproto=2,maxproto=4)
/dev/hdc on /media/cdrom type iso9660 (ro,nosuid,nodev,_netdev)
/dev/sda3 on /home type ext3 (rw,usrquota,grpquota) ---> 확인


3. 쿼타 설정파일 생성하기
cd  /home
touch  aquota.user aquota.group
chmod 600 aquota.user aquota.group
quotacheck  /home

quotacheck : 사용자들이 파티션을 얼마만큼 사용하고 있는지 체크하는 명령어, 루트 파티션을 체크할 때는 -m 옵션을 지정해야 한다.
(quotacheck  -m  /)

사용자별 쿼타는 aquota.user 로 파일 생성
그룹별   쿼타는 aquota.group 로 파일 생성

//////////////////////////////////////////////////////////////////////////
#man  quotacheck
       quotacheck  expects  each
       filesystem  to  be  checked to have quota files named [a]quota.user and
       [a]quota.group located at the root of the associated filesystem.

-m     Don’t try to remount filesystem read-only.
//////////////////////////////////////////////////////////////////////////

aquota.user : 사용자별로 디스크 사용량을 저장하고 있는 파일
(초기상태에서는 없기 때문에 touch 로 생성하고 루트만 접근가능하도록 chmod 600 해 준다.)

#cd  /home
#pwd
/home
#touch  aquota.user  aquota.group
(쿼타를 적용할 파티션 디렉토리, 즉 수업에서는 /home 에 aquota.user, aquota.group 파일을 만들어야 함)

#ll aq*
-rw-r--r--  1 root root 0  8월  6 04:23 aquota.group
-rw-r--r--  1 root root 0  8월  6 04:23 aquota.user

#chmod  600  aquota.user  aquota.group
#ll aq*
-rw-------  1 root root 0  8월  6 04:23 aquota.group
-rw-------  1 root root 0  8월  6 04:23 aquota.user

#quotacheck  -vug  /home
---> warning 이 출력되는데 무시해도 된다.
#quotacheck  -vug  /home
---> 다시 실행하면 warning 이 출력되지 않는다.

-v verbose  자세히 메시지 출력
-u user      사용자 쿼타 체크(디폴트)
-g group   그룹 쿼타 체크

4. 사용자별 쿼타 설정 및 쿼타 On 시키기

edquota   :  사용자별 쿼타 설정 명령어(Edit)
quotaon   :  쿼타를 on 시키는 명령어
quotaoff   :  쿼타를 off 시키는 명령어

edquota -u apple (apple 계정에 대한 쿼타 설정)
edquota -g apple (apple 그룹에 대한 쿼타 설정)

단위는 Kbyte(킬로바이트)
1024byte=1Kbyte
1024Kbyte=1Mbyte

5M  : 5120(1024 x 5)
10M : 10240
50M : 51200

quotaon  /home (쿼타 활성화)

edquota  -p  apple  apple2  apple3
---> apple 계정의 쿼타 설정을 apple2, apple3 에게 복사하는 명령

//////////////////////////////////////////////////////////////////////////
#man edquota
  -p protoname
      Duplicate  the quotas of the prototypical user specified
//////////////////////////////////////////////////////////////////////////

테스트 계정 확인 및 생성하기
#grep  apple  /etc/passwd
apple:x:501:501::/home/apple:/bin/bash
---> 위와같이 나오면 apple 계정이 등록되어 있는 것이고
     출력되지 않으면
     #adduser apple 입력해서 추가해 준다.

#adduser  apple2
#adduser  apple3


#edquota  -u  apple
(apple 계정에 대한 쿼타 편집 명령)

Disk quotas for user apple (uid 500):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda3                        52          0          0            12        0        0

blocks : 디스크 용량 제한 항목
inodes : 파일갯수 제한 항목

soft : 경고메시지 출력 용량
hard : 사용자가 이용할 수 있는 Maximum 용량

soft 를 50M, hard 를 100M 로 주면 50메가를 넘어서면 경고메시지가 출력되지만 유예기간 동안에는 100메가 용량까지
사용할 수 있다.

사이즈 0 은 쿼타 제한이 없다는 의미

blocks 의 52과 inodes 의 12는 계정추가시 자동으로 복사된 파일의 용량과 수가 출력된 것으로 관리자가 수정하면 안 된다.
(blocks 의 52 와  inodes 12 의 숫자는 테스트 할 때 틀릴수도 있으므로 그대로 사용하면 된다.)

◐apple 계정 디스크 사용량 5M 로 제한
edquota -u apple 이 실행된 화면에서 아래와 같이 설정
(vi 입력상태 명령어 i 나 a 를 누른후 입력)

Disk quotas for user apple (uid 500):
Filesystem     blocks       soft       hard
                       52          0       5120

blocsk 의 hard 항목을 5120 으로 설정
inodes 의 hard 항목이 아님
soft, hard 가 0 일 때는 제한없이 사용할 수 있다는 의미
blocks 의 hard 부분에 5120 을 입력하고 저장후 종료하기(esc  :wq)
내부적으로 vi 가 호출되서 사용된 것이므로 저장후 종료는 vi 명령과 동일하다.

(putty 터미널에서 vi 실행하고 키보드 오른쪽의 숫자키패드 사용시 오동작 함--->문자키 위에 있는 숫자키 사용)

#quotaon  -v  /home
(쿼타활성화)

#quota
--->자신(현재 로그인한 계정)의 디스크 사용량 확인하는 명령

Disk quotas for user root (uid 0): none

--->위와 같이 none 으로 나오면 디스크 사용량 제한이 없다는 의미

#quota  apple
(apple 계정의 쿼타량 확인)

Disk quotas for user apple (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda3      32       0    5120                         8       0       0

#repquota -av
(report quota : 사용자별로 디스크 사용량 출력 명령)
-av  모든계정에 대해 자세히 출력
/home 에 aquota.user 또는 quota.user 파일이 없다면 출력되지 않는다.
group 별 쿼타 리포트를 출력하려면 g 옵션 사용


*** Report for user quotas on device /dev/sda3
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
------------------------------------------------------
root      --   35332       0       0              7     0     0
apple     --      32       0    5120              8     0     0
banana    --      32       0       0              8     0     0
candy     --      24       0       0              6     0     0
cola      --      24       0       0              6     0     0
cidar     --      24       0       0              6     0     0
kkk       --      24       0       0              6     0     0

Statistics:
Total blocks: 8
Data blocks: 1
Entries: 8
Used average: 8.000000

---> repquota 의 결과에 모든 계정이 출력되지 않는다면
      quotaoff 를 한 다음 quotacheck 를 다시 해 주면 된다.

#adduser  apple4
#adduser  apple5

#quotaoff  -v  /home
/dev/sda3 [/home]: user quotas turned off

#quotaoff  -v  /home
quotaoff: quotactl on /dev/sda3 [/home]: 그런 프로세스가 없음

--->쿼타를 이미 off 했으므로 위와 같이 출력된다.

quotacheck  /home 은 디폴트로 user 쿼타를 체크하므로 그룹 쿼타까지 체크하려면
quotacheck -ug /home
또는
quotacheck -vug /home
하면 된다.


#quotacheck -vug /home
quotacheck: Scanning /dev/sda3 [/home] done
quotacheck: Checked 68 directories and 105 files


#quotaon -v /home
/dev/sda3 [/home]: group quotas turned on
/dev/sda3 [/home]: user quotas turned on

#quotaon -v /home
quotaon: using /home/aquota.group on /dev/sda3 [/home]: 장치나 자원이 동작 중
quotaon: using /home/aquota.user on /dev/sda3 [/home]: 장치나 자원이 동작 중

---> 쿼타가 활성화 중일 때는 위와 같이 출력됨

#repquota  -av
계정을 추가했는데도 repquota 에서 안 나오면 quotaoff 후 quotacheck 를 다시 하고 repquota 하면 된다.
quota 가 on 상태일 때는 계정을 추가하면 repquota 했을 때 출력된다.

◐apple 의 쿼타 설정을 apple4, apple5 계정에게 복사하기
#edquota  -p  apple   apple4   apple5
-p 프로토타입

#repquota -av
*** Report for user quotas on device /dev/sda3
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
---------------------------------------------------
root      --   35332       0       0              7     0     0
apple     --      28       0    5120              7     0     0
banana    --      28       0       0              7     0     0
candy     --      24       0       0              6     0     0
cola      --      24       0       0              6     0     0
cidar     --      24       0       0              6     0     0
kkk       --      24       0       0              6     0     0
apple4    --       0       0    5120              0     0     0
apple5    --       0       0    5120              0     0     0

Block grace time: 7days
(grace time 은 유예기간으로 soft 와 hard 설정을 둘 다 했을 때 soft 를 넘어선 경우 유예기간 동안 hard 까지 사용할 수 있다는 의미)


5. 쿼타 테스트
ftp 서비스를 이용하여 테스트를 할 것이므로 리눅스 머신을 ftp 서버로 만들고 win7 에서 파일질라 또는 알FTP 이용하여 쿼타 테스트를 한다.

#rpm  -q  vsftpd
설치된 패키지 중에서 vsftpd(ftp 서버)가 있는지 확인 하는 명령

"설치되어 있지 않습니다"로 출력되면 패키지가 없는 것이므로 아래와 같이 yum 이용하여 설치하고 start 를 해 준다.

#yum  -y  install  vsftpd

#rpm -qa | grep vsftpd
vsftpd-2.0.1-5.EL4.5 ---> ftp 서버 프로그램(패키지)이 설치되어 있다는 의미

#service  vsftpd  start
ftp 서버 시작 시키기
---> ftp 서비스를 시작해 주면 다른 컴퓨터에서 알FTP 등으로 접속할 수 있다.

apple 계정 암호 재설정
#passwd  apple
1234
1234


[win7]
파일질라 또는 알FTP 실행
호스트   : 192.168.x.x(리눅스 아이피)
사용자명 : apple
비밀번호 : 1234
--->위와같이 적고 엔터를 눌러서 리눅스로 접속하기

테스트 환경)
[윈도우7]--------------<가상 네트워크>----------------[리눅스 가상머신]

업로드 테스트
---> 쿼타 설정으로 인해 5M 까지만 업로드 되고 중단된다.
(쿼타 설정이 있어도  #quotaon  /home  해 주어야 적용된다.)


◐테스트 결과
[cent]
#cd ~apple
--->apple 의 홈디렉토리로 이동
#pwd
/home/apple
#ls -hl
합계 5.0M
-rw-r--r--  1 apple apple 4.6M  6월 17 17:36 VMware-workstation-6.0.5-109488.exe
-rw-r--r--  1 apple apple 372K  6월 17 17:36 putty.exe


정신없이 따라가면서 종료된 리눅스 수업.. 그 뒷정리를 아직도 못하고 여기까지 왔습니다.
수업은 이미 끝났지만 계속해서 이렇게 내용을 남기겠습니다.
다만 이는 제가 수업을 진행했던 환경에서의 내용을 쭈욱 남긴 것인 만큼 실제로 이 포스트를 보는 님에게는 안 맞을 수도 있습니다.
그렇다고 해도 흐름과 명령어 등을 인식하는데 도움되길 바라며 남기는 것입니다 ^^
항상 행.복.하시길~^^