System Admin

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


RedHat Linux >> System Administration for Redhat Linux
[목차]
제3장 시스템 관리 기초

    2. 파일 시스템


디스크와 같은 블록 장치에 그냥 아무렇게나 파일을 저장하거나 읽을 수는 없다. 운영체제는 블록 장치를 어떻게 쓸 것인지 방법을 강구하게 되는데, 그 규칙이 '파일 시스템(filesystem)'이다. ms-dos 에서는 fat 이라는 매우 간단하고 비효율적인 파일 시스템을 사용하며, 윈도우 95에서는 fat과의 호환성을 유지하면서 몇 가지 문제를 임시방편으로 해결한 vfat 파일 시스템을 사용한다. 리눅스에서는 주로 ext2라는 이름의 파일 시스템을 사용한다. ibm os/2는 hpfs, 윈도우 nt는 ntfs 등의 파일 시스템을 갖는데, 일반적으로 모든 운영체제들은 자신만의 고유한 파일 시스템을 갖는 경향이 있다.

새로운 블록 장치인 하드 디스크를 사오면 관리자가 제일 먼저 하는 일은 각 운영체제가 제공하는 파티션(partition) 분할 프로그램인 fdisk를 사용하여 디스크를 어떻게 쪼개어 사용할 것인지 결정하는 일이다. ms-dos, 윈도우 95/98/nt 등에서는 드라이브명(drive letter)이라는 모호한 개념을 사용하기 때문에 대부분 하나의 하드 디스크 전체 용량을 하나의 파티션으로 설정하여 쓰는 경향이 우세하다. 물론, 윈도우 95 vfat이 2기가 이상의 파티션을 지원하지 못하므로 고용량 하드 디스크를 어절 수 없이 나눠 사용한다. 하지만 이 문제를 해결하는 fat32가 새롭게 제시 윈도우 98에서는 고용량 하드디스크를 fat32로 포맷하여 사용한다.

리눅스, 유닉스에서 파티션을 나누는 작업은 vfat 에서와 같이 파티션용량의 제한이 아니라 기능적인 이유에서이다. 프로그램이 설치되는 파티션, 사용자의 자료가 저장될 파티션, 운영체제가 가상 메모리로 사용한 특별한 파티션 등 각 기능을 위해 별도의 파티션을 만들어 사용하는 것이 일반적이다. 이렇게 분할된 파티션들은 마운트(mount)라는 작업을 통하여 하나의 디렉토리 구조에 통합하여 사용할 수 있다.

파티션을 만든 후 도스에서 format 명령을 사용해 본 사람이 있을 것이다. 파티션을 만들었다고 해서 즉시 운영체제에서 사용할 수 있는 상태는 아니다. 포맷(format)이라는 작업을 하여 ms-dos fat 파일 시스템을 만들어야만 드라이브명을 주고 사용 할 수 있다.

포맷이라도 불러도 좋지만, 리눅스에서는 '파일 시스템을 만든다' 라고 표현한다. 명령의 이름도 format이 아니라 mkfs(make filesystem)이다.

가. 파일 시스템 만들기 mkfs, mke2fs

mkfs -t <파일 시스템유형> <파티션>

-t 옵션 다음에는 일반적으로 리눅스의 표준 파일 시스템인 ext2를 적는다. 이 외에도 minix 파일 시스템 또는 dos 파일 시스템을 만들 수 있다. 하지만, 일반적으로 다른 운영체제의 파일 시스템은 그 운영체제용 프로그램을 가지고 만드는 것이 가장 좋다. 리눅스에서 도스 파일 시스템인 fat 정도는 만들어서 잘 사용할 수 있다.

mkfs 명령은 사실 mke2fs, mkdosfs와 같은 실제 명령에 대한 일반 명령이다. 따라서, ext2 파일 시스템을 만들 때는 다음과 같이 해도 된다.

mke2fs <파티션>

mkfs 명령이 파일 시스템을 만들면서 보여주는 메시지는 매우 중요한 메시지이지만, 처음부터 모든 내용을 이해할 필요는 없다.

몇 개의 아이노드(inode, 파일을 구별하는 단위)와 몇 개의 블록이 있으며, 블록 하나의 크기가 얼마인지 표시해 준다.

블록 중에서도 슈퍼블록(superblock)이라는 것은 파일 시스템의 중요 정보를 담고 있는 부분이기 때문에 슈퍼블록이 깨지면 안에 있는 자료가 멀쩡하다 할지라도 자료를 모두 잃은 것이나 다름없는 상태가 된다. 따라서, 슈퍼블록은 기본적으로 8192블록씩 전진하면서 백업본을 남겨둔다. 나중에 이상 오류로 인해 슈퍼블록이 완전히 박살났다 하더라도 백업된 슈퍼블록을 이용하여 최대한 자료를 복구할 수 있다.

▶ -c 옵션

-c 옵션은 파일 시스템을 만들면서 배드 블록(bad block)이 있는지 여부를 꼼꼼하게 조사하도록 한다. 배드 블록으로 판명된 부분은 피해가면서 파일 시스템을 만든다. -c 옵션을 주지 않았을 때와 실행 속도는 엄청난 차이가 난다. 저속의 하드 디스크라면 정말 오랜 시간이 걸린다는 사실을 알아두기 바란다.

▶ -m <n> 옵션 : 루트를 위한 예비 공간

ext2 파티션에 파일 시스템을 만들 때는 -m 옵션을 적지 않으면 파일 시스템 용량의 5%를 일반 사용자는 사용할 수 없는 공간을 확보한다. 이는 파일 시스템과 달리 수많은 프로그램의 임시 작업 공간을 포함하고있는 루트 파일 시스템이 다 차버리게 되면 프로그램들이 작업을 제대로 하지 못하거나, 비정상적인 행동을 보일 수 있기 때문에 일반 사용자의 권한으로는 절대 파일 시스템을 모두 채울 수 없도록 하는 것이 안전하다.

많은 사람들이 질문하는 내용 중 하나가 바로 디스크의 남은 용량을 보는 df 명령의 출력 결과인데, 분명히 100%를 다 차지하지 않았는데도 불구하고 100% 모두 썼다고 하며, 일반 사용자는 파일을 새롭게 생성하지 못하는 경우가 있다. 바로 루트를 위한 예비 공간 때문이다.

5%라는 값이 파티션의 크기가 클수록 매우 방대한 양이므로 -m 다음에 퍼센트값을 넣어 조절할 수 있다. 그냥 일반 사용자만을 위한 공간 또는 공용 자료 공간을 만들어 사용할 것이라면 -m 0이라고 하여 예비 공간을 아예 없애도 좋을 것이다.

나. 마운트 mount

리눅스에서 모든 블록 장치는 마운트하여 사용한다!

앞서 파일 시스템을 만든 /dev/sda1 파티션을 /data 라는 디렉토리에 마운트시켜 사용해 보자.

[root@leelab /]# mkdir /data

[root@leelab /]# /dev/sda1 /data

일단 /dev/sda1 파티션을 mount 명령으로 /data 디렉토리에 마운트시키면 이제부터 /data 디렉토리에 쓰는 모든 자료는 /dev/sda1 파티션에 저장된다.

▶ 파티션을 하부 디렉토리처럼 쓰는 것!

이것이 바로 마운트의 개념이다. 시스템에 있는 어떤 파티션이든 현재 가동중인 시스템의 하부 디렉토리인 것처럼 사용할 수 잇다. 파티션 하나하나를 드라이브명이라는 개념으로 구분하여 사용하던 습관을 가진 사람은 처음에 마운트 개념을 생소하게 느낄지 모르지만, 마운트 개념의 유용성을 알고 나면 그 진가를 잊지 못할 것이다.(나중에 보면 파티션뿐 아니라, 심지어 파일까지 마운트하여 사용할 수 있다.)

사용법)

mount [ -t <파일 시스템 유형> ] [ -o 옵션,옵션,옵션] <파티션> <디렉토리>

-t <파일 시스템유형>을 제시하면 정확한 파일 시스템 정보를 가지고 마운트할 수 있지만, 일반적으로 ext2, iso9660(시디롬 파일 시스템), nfs(네트워크 파일 시스템) 등은 옵션 없이도 알아서 마운트 해주기 때문에 번거롭게 적을 필요는 없다.

그러나 윈도우 95 vfat 파티션의 경우 -t 옵션 없이 마운트하면 그냥 보통의 msdos 파일 시스템 상태로 마운트되므로 vfat의 긴 이름을 볼 수 없다. 따라서, vfat 파일 시스템으로 마운트시키고자 할 때는 -t vfat 옵션을 주어야 한다.

-o 옵션은 마운트할 때의 특별한 행동을 지시한다. 예를 들어, -o ro는 파일 시스템을 읽기 전용/쓰기 금지 상태로 마운트한다.

현재 시스템의 마운트 정보를 보려면 파티션과 디렉토리를 지정하지 않고 그냥 mount라고만 명령하면 된다. 특정 파일 시스템의 마운트 정보만 보려면 -t 옵션을 사용한다.

mount [ -t <파일 시스템유형> ]

[root@leelab /]# mount

/dev/hda1 on / type ext2 (rw)

none on /proc type proc (rw)

중요한 것은 디렉토리 구조에 있어 근간을 이루는 루트 파일 시스템으로서 /(루트 디렉토리)에 마운트되는 파티션일 것이다.

마운트 명령의 출력은 파티션, 마운트된 디렉토리, 파일 시스템 유형 그리고 괄호 안에 마운트 옵션으로 이루어져 잇다. 일반적으로 괄호 안의 옵션은 rw, 즉 읽기/쓰기이지만 시디롬과 같은 매체는 ro가 기본 값이다.

두 번재 행은 리눅스 커널의 상태를 필요할 때마다 보여주는 proc 파일 시스템으로서 /proc 디렉토리에 none, 즉 아무 것도 마운트되어 있지 않다는 뜻이다. 이에 대해서는 나중에 자세히 알아보기로 한다.

시디롬이든 플로피 디스크든 모두 특정 디렉토리에 마운트해야만 사용할 수 있다.

[root@leelab /]# mount /dev/cdrom /mnt/vdrom

[root@leelab /]# mount /dev/fd0 /mnt/floppy

시디롬을 마운트할 때는 -t iso9660이라고 적어주기도 한다.

특별히 커널 소스를 패치하여 사용하지 않는 한 시디롬을 디렉토리에 마운트하면 시디롬 트레이는 열리지 않도록 되어 있다. 시디롬을 뽑아내고 싶을 때는 꼭 마운트된 디렉토리부터 언마운트시켜야 한다.

플로피 디스크 또한 마운트하여 사용하다는 것이 처음에는 매우 불편하게 여겨질지 모르겠다. 어찌되었든 마운트의 개념에 따라 플로피 또한 블록 장치이므로 마운트하여 사용한다. 주의할 것은 플로피를 아무렇게나 뽑아 교체해서는 안된다는 사실. 꼭 언마운트(umount)한 후 뽑아야 한다.

다. 파일 시스템 마운트 테이블 /etc/fstab

/etc/fstab은 파일 시스템 테이블이다. 이 안에는 시스템 부팅과 함께 자동으로 마운트되어야 할 항목과 옵션이 들어 있다. 자동 마운트 기능 외에도 마운트를 편하게 하기 위해 /etc/fstab이 존재한다.

예를 살펴보면서 /etc/fstab의 기능과 중요성을 알아보자.

<device> <mountpoint> <filesystemtype> <options> <dump> <fsckorder>

/dev/hda1 / ext2 defaults 1 1

/dev/hda5 swap swap defaults 0 0

/dev/fd0 /mnt/floppy ext2 noauto 0 0

/dev/cdrom /mnt/cdrom iso9660 noauto,ro 0 0

none /proc proc defaults 0 0

<장치명> <디렉토리> <파일 시스템> <옵션> <덤프> <파일 시스템 점검 순서>

/etc/fstab은 6개의 필드로 구성되어 있다. 먼저, 가장 일반적인 경우를 살펴보자.

/dev/hda1 / ext2 defaults 1 1

위의 내용은 /dev/hda1 파티션을 루트(/) 디렉토리에 마운트하며, 파일 시스템은 ext2임을 나타내다. 마운트할 때의 옵션은 defaults이다. defaults는 rw, suid, dev, exec, auto, nouser, async 옵션을 합한 것과 같다. 다섯 번째 필드인 <덤프> 값은 dump 라는 프로그램에 의해 덤프할 파일 시스템인지 여부를 적는 것이데, ext2 리눅스 파티션인 경우 1로 설정하고, 나머지는 0으로 설정한다. <파일 시스템 점검 순서> 부분은 ext2 파일 시스템의 하드 디스크 파티션에서만 사용한다. 이 곳이 1이상의 값으로 설정되어 있는 파티션은 부팅과정에서 파일 시스템의 이상 여부 확인 후 문제가 있다고 판단되면 자동 점검된다. 루트 파티션은 1의 값을 갖고, 나머지 ext2 파티션은 2이상의 값을 갖는다. 하지만, 모두 1로 적는다고 해서 문제가 있지는 않다. ext2 이외의 파티션은 0으로 설정하여 파일 시스템 자동 체크를 하지 않도록 해둔다.

/dev/fd0 /mnt/floppy ext2 noauto 0 0

/dev/cdrom /mnt/cdrom iso9660 noauto,ro 0 0

시디롬은 파티션이라는 개념이 없으므로 그냥 시디롬 장치명을 적는다.

마운트될 디렉토리는 /mnt/cdrom이며, 파일 시스템은 iso9660이다. 옵션은 빈 칸 없이 콤마(,)를 찍어 구분한다. 빈 칸이 들어가면 fstab 파일의 다른 필드와 구별할 수 없기 때문이다.

일단 ro 옵션은 읽기 전용을 의미한다. 시디롬이란 매체의 특성상 ro 옵션을 넣어주는 것이 좋다. ro 옵션을 넣지 않는다고 해서 문제가 되는 것은 없다. 단지, 마운트할 때 다음과 같은 간단한 경고 메시지가 뜨는데, 시스템에 해가 되는 것은 아니며, ro를 넣지 않았다고 해서 시디롬에 쓰기가 되는 것도 아니다.

mount: block device /dev/cdrom is write-protected, mounting

read-only

noauto 옵션은 시디롬과 플로피 디스크에 매우 유용한 옵션이다. noauto 옵션이 들어간 항목은 시스템 부팅중 자동으로 마운트되지 않는다. 시디롬과 플로피 디스크는 쓰고 싶을 때만 넣고 마운트하는 매체이기 때문에 부팅중 마운트하려 들면 귀찮은 메시지만 나올 뿐이다.

mount: wrong fs type, bad option, bat superblock on /dev/cdrom,

or too many mounted file systems

그러면 시스템 부팅중 자동으로 마운트하지도 않을 항목을 뭐하러 /etc/fstab에 넣는 것일까? 그것은 마운트 명령이 편해지기 때문이다.

위의 예에서 /dev/hdd 장치가 시디롬이고, /mnt/cdrom에 마운트한다는 사실을 기록해 두었기 때문에 시디롬을 마운트하기 위해서는 다음과 같이 하기만 해도 된다.

1. 시디롬을 시디롬 드라이브에 넣는다.

2. mount /mnt/cdrom

mount 명령 다음에 마운트되는 디렉토리만 적어주면 /etc/fstab 항목을 찾아보고 장치명과 옵션을 자동으로 가져다 쓴다.

플로피 디스크도 마찬가지이다. 플로피 드라이브에 디스크를 넣고 mount /mnt/floppy 라고만 명령하면 된다.

플로피 디스크에 대해서는 다음과 같이 장치명은 같고, 마운트할 디렉토리와 파일 시스템 유형만 다른 항목을 설정해 넣고 사용하면 편하다.

/dev/fd0 /mnt/dos msdos noauto 0 0

/dev/fd0 /mnt/floppy ext2 noauto 0 0

/dev/fd0 /mnt/win95 vfat noauto 0 0

ext2 파일 시스템의 플로피 디스켓을 넣고, 필자는 mount /mnt/floppy라고 명령한다. 하지만, ms-dos 파일 시스템의 플로피 디스켓이라면 mount /mnt/dos라고 명령한다. 만약에 vfat 방식으로 포맷된 플로피이고, 긴 이름을 보고 싶다면 mount /mnt/win95라고 입력한다.

플로피의 경우에는 쓰기 작업이 버퍼링없이 그때그때 곧바로 이뤄지도록 sync 옵션을 주어도 괜찮다.

참고로, 시디롬 매체 또는 플로피 매체를 도스, 윈도우 95에서와 같이 사용할 수 있는 기능이 개발되고 있는데, 그것을 슈퍼마운트(supermount)라고 부른다. 슈퍼마운트 기능을 커널에 넣고(또는, 모듈로) 슈퍼마운트 데몬을 띄워두면 매체를 갈아낄 때마다 자동으로 마운트 해주고 언마운트 해준다. 조만간 기본 배포판 내용이 되리라 보지만 아직은 들어오지 않은 상태이다.

▶ 알아두면 편리한 옵션 user

파일 시스템을 마운트하거나 언마운트할 수 있는 권한은 기본적으로 root에게 있다. 나머지 사용자는 파일 시스템을 가지고 어떻게 할 수 없다.

하지만, 시디롬이나 플로피 등은 일반 사용자 권한으로도 마운트/언마운트 할 수 있게 해두면 편리할 때가 있다. 그럴 때는 user라는 옵션을 옵션 필드에 추가해 주면 된다. 그러면 일반 사용자도 그 파일 시스템에 대해서는 마운트/언마운트를 할 수 있다.

다음처럼 파일 시스템 유형 부분에 무시를 뜻하는 ignore를 적으면 글자 그대로 무시된다 그럼, 왜 이런 항목을 넣어두는가? 넣어두지 않아도 무방하지만, 파티션 정보를 제공하기 위해 자동화된 프로그램들이 넣어두는 것뿐이다.

/dev/hda1 none ignore 0 0 0

다음은 리눅스 시스템에 배우 중요한 두 개의 독특한 파일 시스템 설정이다.

none /proc proc defaults

/dev/hda5 none swap sw

우선, 장치명이 없음(none)으로 되어 있는 항목은 리눅스 특유의 가상적인 파일 시스템으로서 proc 파일 시스템이라고 부른다. /proc 디렉토리에 어떤 실제 물리적인 저장 매체가 마운트되는 것은 아니다.

/proc 디렉토리에 들어가면 커널의 내부 정보를 디렉토리와 파일의 구조로 볼 수 있다. 또는, 운영중인 커널의 옵션을 바꿀 수 있게 해준다. /proc 디렉토리에 가서 ls 해보고, cat 명령을 사용하여 파일 내용를 보면 흥미로운 것이 많다는 사실을 느끼게 될 것이다.

/proc 파일 시스템은 매우 유용한 파일 시스템인 것이 사실이지만, 보안이 중요하다고 느끼고 일반 사용자에게 커널의 작동 현황을 전혀 보여주고 싶지 않을 때는 마운트하지 않고 사용할 수 있다. 대신 시스템의 정보를 표시 해 주는 많은 프로그램들이 제대로 작동하지 않을 것이다.

마지막으로, 파일 시스템 유형 swap인 장치는 사실 마운트 하는 장치가 아니기 때문에, 이번에는 마운트할 디렉토리를 적는 곳에 없음(none)이라고 적은 것을 볼 수 있다. 옵션은 sw이다.

스왑 파티션을 이 곳에 적지 않으면 자동으로 스왑이 활성화되지 않는다. 스왑파티션이 여러 개 있을 대는 스왑 파티션 하나하나마다 다 적는다.

라. 언마운트 umount

마운트의 반대는 언마운트이다. 그런데 언마운트하는 명령은 unmount가 아니라, n이 없는 umount이다.

umount 명령의 사용법은 어려울 것이 전혀 없다.

umount <마운트된 디렉토리>

umount <마운트된 장치명>

마운트된 장치와 디렉토리 정보는 이미 커널 안에, 그리고 /etc/mtab 파일에 보관되어 있기 때문에 디렉토리 또는 장치명만 적어주면 알아서 언마운트해준다.

▶ umount되지 않을 때

누군가 마운트된 디렉토리 안에서 작업하고 있을 때는 언마운트되지 않는다.

[root@leelab /]# pwd

/mnt/cdrom

[root@leelab /]# umount /mnt/cdrom/

umount: /mnt/cdrom: device is busy

위의 예는 /mnt/cdrom 디렉토리에 시디롬을 마운트해 놓은 다음, 그 안에 들어간 상태에서 언마운트하려 했을 때 에러 메시지를 받는 상황이다.

이 외에도 어떤 프로그램이 마운트된 디렉토리에서 실행되어 계속 실행중인 상태인 경우에는 디렉토리를 빠져 나온 상태라 할지라도 언마운트되지 않고 '장치가 사용중(device is busy)'이라는 에러 메시지를 받는다.

마운트된 디렉토리를 빠져 나오거나 마운트된 디렉토리에서 실행중인 프로그램을 종료하지 않으면 언마운트되지 않기 때문에 정말 강제로라도 언마운트하고 싶다면 다음 fuser 명령을 사용한다.

[root@leelab /]# fuser -km /mnt/cdrom

위 명령은 /mnt/cdrom 디렉토리 이하에 머무르고 있는 모든 프로세스에게 막을 수 없는 sigkill 시그널을 보내어 강제로 죽여버리게 된다. 만약 fuser 명령을 /mnt/cdrom 디렉토리 아래에서 했다면 자기 자신도 죽여버리는 결과를 낳게 될 것이다.

이제 마운트된 디렉토리 이하를 사용하는 프로세스가 없으므로 언마운트시킬 수 있다.

마. 파일 시스템 수리

예기치 않은 사건으로 인해 파일 시스템에 이상이 생기는 상황이 도래할 수 있다. 보통 시스템 가동중 갑작스럽게 이상이 생기는 상황이 도래할 수 있다. 보통 시스템 가동중 갑작스럽게 정전을 당했다든지, 또는 전원 코드를 뽑았다든지, 리셋 스위치를 누르는 일을 했다든지, 아니면 하드웨어나 커널 패닉(panic)사태가 발생하여 정상적인 언마운트 과정을 거치지 못한 경우 파일 시스템에 이상이 생긴다.

파일 시스템 수리를 수동을 해야 하는 상황은 그렇게 많지 않다. 왜냐하면, 시스템 부팅중 문제가 발견되면 자동으로 파일 시스템을 수리하도록 초기화 스크립트들이 짜여져 있기 때문이다. 자세한 루틴을 보고 싶으면 /etc/rc.d/rc.sysinit 스크립트 내용을 훑어보라.

어쩌다 한 번쯤은 파일 시스템 수리 도중 문제가 심각하여 관리자의 판단이 필요하다고 느끼면 다음과 같은 메시지를 출력하면서 루트의 패스워드를 물어온다.

이 셸은 exit하여 종료하면 자동 리부팅하도록 스크립트가 짜여져 있다.

"*** an error occurred during the file system check."

"*** dropping you to a shell; the system will reboot"

"*** when you leave the shell."

give root password for maintenance

(or type control-d for normal startup):

(repair filesystem) #

자, 이제 여러분이 나서 기회가 온 것이다.

▶ 파일 시스템 수리 명령 fsck, e2fsck

fsck와 e2fsck의 관계는 mkfs, mke2fs의 관계와 같다. fsck는 일반 명령이고, -t ext2 옵션을 받으면 e2fsck를 실행한다.

파일 시스템에 이상이 없는 경우에는 다음처럼 간단히 작업을 마치고 종료해 버린다.

[root@leelab /]# e2fsck /dev/hdc1

e2fsck 1.10, 24-apr-97 for ext2 fs 0.5b, 95/08/09

/dev/hdc1: clean, 10209/102816 files, 205815/411232 blocks

▶ 강제 옵션 -f

파일 시스템에 이상이 없다고 판단하면 e2fsck는 파일 시스템을 점검하지 않는다.

이를 무시하고 무조건 점검하게 하려면 강제(force)를 의미하는 -f 옵션을 붙여 실행한다.

[root@leelab /]#e2fsck -f /dev/hdc1

e2fsck 1.10, 24-apr-97 for ext2 fs 0.5b, 95/08/09

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

/dev/hdc1: 10209/102816 files (10.7% non-contiguous), 205815/411232 blocks

▶ 자동 수리 옵션 -a

-a 옵션은 자동(auto) 수리를 뜻한다. fsck는 기본적으로 문제가 발생했을 때, 예를 들어 부적격한 아이노드(inode)를 삭제할 것이지 여부를 물어오는데, 이 질문에 대하여 무조건 y라고 답하고 싶을 때이다.

▶ 전체 점검 옵션 -a

-a 옵션은 모두(all)를 뜻한다. 하나하나 점검하는 것이 아니라 /etc/fstab을 보고 수리해야 할 모든 파일 시스템을 처리한다.

▶ 슈퍼블록이 깨진 경우 -b

파일 시스템의 중요 정보가 저장되어 있는 곳이 바로 슈퍼블록이라는 곳이다. 이 슈퍼블록이 깨지지 않은 한 문제는 크지 않다. 하지만, 슈퍼블록이라고 깨지지 말란 법은 없다. 슈퍼블록이 깨진 경우 파일 시스템 자체를 제대로 인식하지 못하므로 파일 시스템 수리 작업이 제대로 진행되지 않는다.

이때는 8192 블록마다 한 번씩 백업되어 있는 슈퍼블록 백업본을 가지고 수리에 나설 수 있다.

e2fsck -b 8193 /dev/sdc5

슈퍼블록은 블록 1번에 위치한다. 여기서 8192 블록만큼 전진한 위치는 1+8192이므로 첫 번째 백업 슈퍼블록은 8193번에 있다. 그래서 -b 8193이라는 옵션이 만들어지는 것이다. 만약 첫 번째 블록도 망가졌다면(이런 일은 거의 없지만) 두 번째 백업 블록을 사용하면 되는데, 위치는 1+8192*2이므로 16385번 블록이 된다.

8192라는 값은 mke2fs로 파일 시스템을 만들 때 사용되는 기본값으로서, 여러분이 만약 이 기본값을 변경했다면 그 값을 따라야 한다.

이렇게 해도 되지 않는다면 하드웨어적인 문제를 의심해 보아야 한다. 하드디스크를 연결하는 케이블이 빠졌다든지 하는 황당한 일도 있을 수 있으니 너무 성급하게 결론내리지 말자.

▶ lost+found 디렉토리

파일 시스템을 만들 때마다 꼭 lost+found 라는 디렉토리가 하나 기본적으로 만들어지는 것을 볼 수 있다. 파일 시스템 수리 중 끊어진 고아 아이노드들이 이 디렉토리에 숫자 파일명으로 들어가게 된다. 완전히 엉망인 이름으로 이 곳에 쓰레기처럼 놓여지긴 하지만, file 명령으로 확인하든가, 아니면 텍스트 파일인 경우 하나하나 확인하여 복구하는 것이 가능하므로 이 디렉토리의 중요성을 알아두자.

사. 플로피 디스크 사용하기

플로피 디스크는 저용량, 초저속 매체이므로 같은 블록 매체라 하더라도 하드 디스크와는 다르게 취급한다.

우선, 플로피 디스크에 파일 시스템을 만들려면 하드 디스크와 달리 파티션 작업이 없지만 대신 플로피 포맷 작업이 있다.

▶ 플로피 포맷하기 fdformat

리눅스에서 플로피 디스크 드라이브 장치를 가리키는 일반 장치명은 /dev/fd0, /dev/fd1이다. 그냥 읽기 작업을 할 때는 커널이 알아서 플로피 디스크의 용량을 확인하고 처리해 주기 때문에 일반 명령에서는 그냥 첫 번째 플로피 드라이브를 플로피 드라이브의 용량에 관계없이 /dev/fd0, 그리고 두 번째를 /dev/fd1이라고 부른다.

하지만, 포맷 작업을 할 때는 이야기가 달라진다. 예를 들어 필자의 첫 번째 플로피 드라이브는 최대 2.88mb를 지원하는 드라이브인데, 플로피 디스크는 1.44메가로 포맷할 수 있고, 또는 그보다 낮은 용량으로 포맷하는 것도 가능하다.

따라서, fdformat이라는 플로피 디스켓 포맷 명령에서는 /dev/fd0h1440, /dev/fd0h1200와 같이 플로피 장치 순서와 용량을 같이 표현하고 있는 긴 장치명을 사용한다. 이 장치명은 포맷 작업에서만 사용한다

[root@leelab /]# fdformat /dev/fd0h1440

double-sided, 80 tracks, 18 sec/track. total capacity 1440 kb.

formatting ... done

verifying ... done

[root@leelab /]#

위의 예는 1.44메가 플로피 디스켓을 포맷하는 명령이다.

▶ 파일 시스템 만들기

포맷한 후 파일 시스템을 만드는 명령은 하드 디스크 파티션의 예에서와 마찬가지로 mkfs, mke2fs를 사용한다.

[root@leelab /]# mke2fs /dev/fd0

mke2fs 1.12, 9-jul-98 for ext2 fs 0.5b, 95/08/09

linux ext2 filesystem format

filesystem label=

360 inodes, 1440 blocks

72 blocks (5.00%) reserved for the super user

first data block=1

block size=1024 (log=0)

fragment size=1024 (log=0)

1 block group

8192 blocks per group, 8192 fragments per group

360 inodes per group

writing inode tables: done

writing superblocks and filesystem accounting information: done

[root@leelab /]#

mke2fs 명령에서는 그냥 간단한 장치명인 /dev/fd0, /dev/fd1을 사용한다.

플로피 디스켓의 경우에는 이기종 간의 자료 전달이 주목적인 경우가 많으므로 가장 낮은 기능의 공통적인 fat 파일 시스템을 만들어 사용하는 것이 편리하다. fat 형식으로 해두면 매킨토시부터 시작해서 못읽는 시스템이 없기 때문이다.

[root@leelab /]# mkdosfs /dev/fd0

mkdosfs 0.3b (yggdrasil), 5th may 1995 for ms-dos fs

[root@leelab /]#

위의 예에서 처럼 mkdosfs 명령을 사용하면 도스 파일 시스템을 만들 수 있다.

아. 도스처럼 사용하기 mtools

리눅스에서는 유닉스에와 마찬가지로 모든 블록 장치를 마운트하여 사용한다. 하지만, 도스 플로피같은 것을 일일이 마운트해서 사용한다는 것이 귀찮을 때가 한두 번이 안다. 리눅스에서는 뭔가 귀찮은 작업이 발견되기 시작하면 금새 그 해법이 나오기 마련이다.

플로피 디스켓과 하드 디스크를 도스처럼 사용하게 해주는 패키지 이름이 mtools이다. mtools에 속한 명령들은 도스의 명령 앞에 m이 붙은 형태이다.

우선, dir 명령에 해당하는 mdir 명령을 사용해 보겠다. 플로피 드라이브에 도스 플로피 디스켓을 넣고 mdir a: 라고 명령해 보자.

[root@leelab /]# mdir a:

volume in drive a has no label

volume serial number is 3885-c380

directory for a:/

no files

1 457 664 bytes free

[root@leelab /]#

복사 명령은 mcopy이다.

[root@leelab /root]# mcopy test.txt a:

[root@leelab /root]# mdir a:

volume in drive a has no label

volume serial number is 3885-c380

directory for a:/

test txt 36 01-19-2000 23:03 test.txt

1 file 36 bytes

1 457 152 bytes free

[root@leelab /root]#

mcopy 명령은 리눅스 파일 시스템과 도스 파일 시스템 스타일의 드라이브명을 교묘하게 적을 수 있다. 플로피 디스켓에 들어 있는 모든 파일을 복사하려면 mcopy a:* 라고 명령하면 된다. 그러면 현재 디렉토리에 모든 파일을 복사한다.

주의할 것은 mcopy 동작중 리눅스의 긴 파일명은 도스 파일 시스템에 맞게 잘려나가고 보존될 수 없다는 사실이다.

▶ 설정 파일 mtools.conf

# linux floppy drives

drive a: file="/dev/fd0" exclusive

drive b: file="/dev/fd1" exclusive

# first scsi hard disk partition

#drive c: file="/dev/sda1"

# first ide hard disk partition

#drive c: file="/dev/hda1"

# # dosemu floppy image

# drive m: file="/var/lib/dosemu/diskimage"

# dosemu hdimage

drive n: file="/var/lib/dosemu/hdimage" offset=8832

그렇게 많이 사용하지는 않지만, 하드 디스크 fat/vfat 파일 시스템에 대해서도 mtools 명령을 사용할 수 잇다. 플로피 드라이브의 경우 별다른 설정이 필요치 않지만, 하드 디스크 파티션에 대해서는 c: 드라이브에 어떤 파티션이 연관되어 있는지 정확하게 알려줄 필요가 있다.

mdir 명령은 fat 파일 시스템인지, 아니면 vfat인지 구별한다. 그리고 최신 버전에서는 fat32도 지원한다.

삭제 명령은 mdel 이다.

[root@leelab /]# mdel a:*

[root@leelab /]# mdir a:

volume in drive a has no label

volume serial number is 3885-c380

directory for a:/

no files

1 457 664 bytes free

[root@leelab /]#

포맷 명령도 지원한다.

[root@leelab /]# mformat -l 리눅스 a:

[root@leelab /]# mdir a:

volume in drive a has no label

volume serial number is 3885-c380

directory for a:/

no files

1 457 664 bytes free

[root@leelab /]#

자. zip 드라이브 사용하기

간편한 이동형 매체로 zip드라이브는 ibm-pc와 매킨토시 모두에게 이기를 끌고 있는 매체이다. 100메가 분량의 zip 디스켓은 매력적이라 하지 않을 수 없다.

zip 드라이브는 패러렐 포트 버전(ppa), ide/atapi, scsi 이렇게 3가지 버전이 있다.

이 중 ide/atapi, scst 버전은 리눅스에서 아무 문제없이 사용 할 수 있다. ide/atapi zip 드라이브는 커널에 ide/atapi floppy 기능이 들어 있으면 되고, scsi 버전은 scsi 어댑터만 인식하면 그만이다.

패러렐 포트 버전의 zip 드라이브는 zip 디스켓뿐 아니라 드라이브 자체도 갖고 다닐 수 있기 때문에 많이 사용하지만, 속도는 ide/atapi, scsi에 비해 형편없이 떨어질 수밖에 없다. 리눅스에서 zip 드라이브 ppa 버전을 사용하려면 ppa 모듈을 올려야한다. 주의할 것은 zip ppa 버전은 패러렐 포트를 사용하기 때문에 현재로서는 프린터와 같이 사용할 수 없다는 것이다. 여러분이 손수 커널 컴파일을 할 때 zip ppa 기능과 프린터 기능, 그리고 병렬 포트를 이용한 ip 연결 기능인 plip은 모두 모듈로 해 주어야만 한다. 필요할 때 원하는 기능을 넣고 빼낼 수 있기 때문이다. 하지만, 그냥 통짜커널에 어떤 기능을 넣는 경우에는 다른 기능을 사용할 수 없다.

참고로 zip ppa 버전은 마치 scsi 디스크 장치인 것처럼 인식하므로 /de/sda, /dev/sdb와 같은 장치명을 사용한다. ide/atapi는 ide 장치명인 /dev/hdb, /dev/hdc 등을 사용한다.

▶ zip 디스켓을 처음 사왔을 때

zip 디스켓을 처음 사오면 도스 파일 시스템으로 포맷되어 있다. 그리고 어떤 이유에서인지는 몰라도 파티션 정보를 보면 /dev/sda4와 같이 4번 파티션으로 잡혀 있다. zip ppa 버전인 경우 다음과 같이 사용할 수 있다.

[root@leelab /]# modprobe ppa

[root@leelab /]# mount /dev/sda4 /mnt/dos

몰론, fdisk를 사용하여 파티션을 재조정하고, ext2 파티션을 만들어 사용할 수 있다.

▶ zip 드라이브 유틸리티

인터넷 리눅스 소프트웨어 관련 사이트를 돌아다니다 보면 zip 드라이브를 관리해 주는 편리한 프로그램들이 많이 나와있다.

[목차]

개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.