2011. 8. 10. 02:52

♧ 리눅스에서는 윈도우에서 사용하는 scandisk 유틸리티와 같은

물리적인 수준에서 배드블록을 검사하기 위해 badblocks 명령어를 사용한다.

그리고 fsck 명령어를 사용해 논리적인 수준에서 파일시스템의 오류를 검사할 수도 있다.

 

■ badblocks - 장치의 배드블럭을 검색

badblocks [ -b 블록크기 ] [ -o 출력파일 ] [ -v ] [ -w ]

 

◈ [ 옵션 ]

옵 션

설 명

-b 블록크기

블록크기를 바이트 수로 나타냄 (기본값 : 1024 bytes)

-o 파일명

지정한 파일에 배드 블록의 리스트 기록

-v

자세한 출력 모드

-e 최대블록개수

점검을 멈출 최대 블록 개수 (0이면 지정된 범위 까지 점검)

-p num_passes

지정된 숫자 만큼 디스크 스캔 반복.

-w

읽기/쓰기 모드 에서 배드블록을 검사 (-n 옵션과 함께 사용 X, 상호 배타적임)

-n

비-파괴 읽고/쓰기 모드 ( -w옵션과 함께 사용 X, 상호 배타적임)

-s

검사 진행 과정 표시

 

 

badblocks 명령의 일반적인 사용 예:

 

▶ -v 옵션 : 자세한 정보 출력과 함께 기본적인 사용

$ sudo badblocks -v /dev/sdb1

Checking blocks 0 to 1044192

Checking for bad blocks (read-only test): done

Pass completed, 0 bad blocks found.

 

▶ 비-파괴 모드로 배드블록을 검사.

$ sudo badblocks -vsn /dev/sdb1

Checking for bad blocks in non-destructive read-write mode

From block 0 to 1044192

Checking for bad blocks (non-destructive read-write test)

Testing with random pattern: 12.88% done, 0:05 elapsed

☞ 기본적으로, 배드블록 검사는 읽기전용 모드에서 수행하는 것이 안전하다.

비-파괴(non-destructive) 읽고/쓰기 검사는 매우 느리지만

디바이스에 저장된 데이터의 손실 없이 검사할 수 있는 가장 좋은 방법이다.

 

▶ 읽기/쓰기 모드 검사. ( 경고 : 데이터가 파괴될 수 있음 )

$ sudo badblocks -vsw /dev/sdb1

Checking for bad blocks in read-write mode

From block 0 to 1044192

Testing with pattern 0xaa: done

Reading and comparing: done

Testing with pattern 0x55: done

Reading and comparing: done

Testing with pattern 0xff: done

Reading and comparing: done

Testing with pattern 0x00: done

Reading and comparing: done

Pass completed, 0 bad blocks found.

☞ 읽기/쓰기 모드에서 배드블록을 검사하는 것으로 빠르게 검사할 수는 있지만 데이터가 파괴 된다.

 

▶ 다수의 배드블록 검사 수행

$ sudo badblocks -vsnp 2 /dev/sdb1

☞ 디스크 품질을 검사하고, 초기 고장률을 낮추기 위한 테스트용으로 사용.

 

 

■ fcsk - 리눅스 파일시스템을 검사

fsck 명령어는 특정 파일시스템 유형에 사용되는 검사 유틸리티의 프론트엔드 역할을 수행.

 

fsck [ -AVRTNP ] [ -s ] [ -t 파일시스템유형 ] [ 파일시스템옵션 ] 파일시스템 [ ... ]

 

◈ [ 옵션 ]

옵 션

설 명

-A

/etc/fstab 파일에 표시된 모든 파일시스템을 한 번 씩 모두 점검.

-R

-A 플래그와 같이 사용될 때 루트 파일시스템은 제외

-T

시작할 때 버전정보를 출력하지 않음

-V

자세한 출력 수행

-N

실행하지는 말고 어떤 작업을 할 것인지만 보여줌.

 

 

fsck 명령의 일반적인 사용 예:

 

▶ 파일시스템 검사 (-TV : 자세한 출력 및 버전 출력 방지 옵션)

$ sudo fsck -TV /dev/sdb1

[/sbin/fsck.ext4 (1) -- /dev/sdb1] fsck.ext4 /dev/sdb1

e2fsck 1.41.14 (22-Dec-2010)

/dev/sdb1 is mounted.

 

WARNING!!! The filesystem is mounted. If you continue you ***WILL***

cause ***SEVERE*** filesystem damage.

 

Do you really want to continue (y/n)? yes

 

/dev/sdb1: 저널 복구중

/dev/sdb1: clean, 11/65280 files, 8523/261048 blocks

 

▷ 검사 수행 도중 문제가 발생하면, 문제를 수정할 것인지 사용자에게 물어보는데

-y옵션을 추가하여 모든 질문에 대해 yes로 답변하도록 할 수 있다.

$ sudo fsck -TVy /dev/sdb1

 

 

Posted by devanix
2011. 8. 10. 00:55

■ mount 명령어를 사용해 파일시스템 마운트 하기

♧ mount 명령어를 사용하면 로컬(하드디스크, USB, CD, DVD 등)뿐만 아니라 원격지(NFS, 삼바 등)까지

포함해 시스템에 마운트되어 있는 모든 파일시스템 정보를 볼 수 있음.

 

mount [-hV]
 
 

    mount -a [-fnrvw] [-t 파일시스템유형]

    mount [-fnrvw] [-o 옵션 [,...]] 장치 | 디렉토리

    mount [-fnrvw] [-t 파일시스템유형] [-o 옵션] 장치 디렉토리

 

 

▶ mount 명령어 옵션

옵 션

설 명

-a, --all

fstab 파일에 언급된 모든 파일시스템을 마운트.

-v, --verbose

자세한 출력 모드.

-f, --fake

실제 시스템 호출은 하지 않고 마운트할 수 있는지 점검.

보통 -v 플래그를 써서 mount 명령의 결과를 알고자 할 때 유용

-n, --no-mtab

/etc/mtab 파일에 쓰기 작업을 하지 않고 마운트.

/etc가 읽기전용 파일시스템인 경우에 필요.

-r, --read-only

읽기만 가능하게 마운트. ( 같은 옵션으로 -o ro )

-w, --rw

읽기/쓰기 모드로 마운트. ( 같은 옵션으로 -o rw ) 기본 디폴트값

-t <vfstype>

마운트할 파일시스템 유형을 명시적으로 지정.

-o <options>

플래그 뒤에 콤마로 분리한 옵션을 적어준다.

-B, --bind

기존에 마운트되어 있는 파일시스템을 서브트리의 다른 위치에 한번 더 마운트.

-M, --move

마운트되어 있는 파일시스템의 마운트 지점을 다른 위치로 이동.

 

▷ 마운트 플래그 옵션 : 파일시스템 속성 설정 옵션

옵 션

설 명

defaults

rw, suid, dev, exec, auto, nouser, async 속성을 모두 가짐

auto

부팅시 자동 마운트

noauto

부팅시 자동마운트 안함

dev

파일시스템 상의 문자, 블럭 특수 장치를 해석.

nodev

파일시스템 상의 문자, 블럭 특수 장치를 해석 하지 않음.

exec

바이너리 실행파일이 실행되는 것을 허용.

noexec

바이너리 실행파일이 실행되는 것을 허용 안함.

(/tmp 디렉토리와 같이 신뢰할 수 없는 사용자도 접근할 수 있는 경우에 보안 향상)

suid

setuid, setgid 의 사용을 허용

nosuid

setuid, setgid의 사용을 거부

ro

읽기 전용 (read-only)

rw

읽기/쓰기 (read/write) 가능

async

파일시스템에 대한 I/O가 비동기적으로 이뤄지게 함.

sync

파일시스템에 대한 I/O가 동기적으로 이뤄지게 함.

user

일반 계정 사용자들도 마운트 할 수 있게 허용

nouser

일반 계정 사용자가 마운트할 수 없음 (즉, root만 mount 가능)

noatime

파일 접근시간을 업데이트하지 않는다.

(메일 스풀이나 로그와 같이 I/O가 많은 파일시스템에 유용)

remount

이미 마운트된 파일시스템을 다시 마운트.

 

 

mount 명령 기본적인 사용 예:

▶ 마운트된 로컬 및 원격지 파일시스템 목록보기

$ mount

/dev/sda1 on / type ext4 (rw,errors=remount-ro,commit=0)

proc on /proc type proc (rw,noexec,nosuid,nodev)

none on /sys type sysfs (rw,noexec,nosuid,nodev)

 

▶ 특정 파일시스템 유형을 가진 목록만 보기 (-t 옵션 사용)

$ mount -t ext4

/dev/sda1 on / type ext4 (rw,errors=remount-ro,commit=0)

/dev/sdb1 on data type ext4 (rw)

 

/dev/sdb1 디바이스를 /mnt/mymount로 마운트 (-v 옵션 : 자세한 정보 출력)

$ sudo mount -v /dev/sdb1 /mnt/mymount/

mount: you didn't specify a filesystem type for /dev/sdb1

I will try type ext4

/dev/sdb1 on /mnt/mymount type ext4 (rw)

☞ 파일시스템 유형을 명시하지 않고 경고를 출력하며, 알아서 ext4로 시도하여 마운트 함.

 

▶ 마운트할 파일시스템 유형을 명시적으로 지정 (-t 옵션 사용)

$ sudo mount -v -t ext4 /dev/sdb1 /mnt/mymount

/dev/sdb1 on /mnt/mymount type ext4 (rw)

 

▶ 마운트 옵션 지정 (-o 옵션 사용)

/* 읽고/쓰기(rw) 모드 지정 */

$ sudo mount -v -t ext4 -o rw /dev/sdb1 /mnt/mymount

/dev/sdb1 on /mnt/mymount type ext4 (rw)

/* 읽기전용(ro) 모드 지정 */

$ sudo mount -v -t ext4 -o ro /dev/sdb1 /mnt/mymount

/dev/sdb1 on /mnt/mymount type ext4 (ro)

/etc/fstab 파일의 네 번째 필드와 동일한 효력을 가짐.

-o 옵션과 콤마로 구분된 옵션들을 입력하여 구제적인 마운트 옵션을 지정해줄 수 있음.

 

remount 옵션 - 이미 마운트되어 있는 파일시스템의 옵션 변경.

/* 만약 이미 마운트 되어 있다면 경고 메시지와 함께 마운트 되지 않는다 */

$ sudo mount -v -t ext4 -o ro /dev/sdb1 /mnt/mymount

mount: /dev/sdb1 already mounted or /mnt/mymount busy

mount: according to mtab, /dev/sdb1 is already mounted on /mnt/mymount

/* remount 옵션을 사용하여 한번의 명령으로 언마운트하고 새로운 옵션으로 다시 마운트 */

$ sudo mount -v -o remount,rw /dev/sdb1 /mnt/mymount

/dev/sdb1 on /mnt/mymount type unknown (rw)

☞ 읽기 전용으로 마운트되어 있는 파일시스템을 읽기전용으로 다시 마운트.

 

--bind 옵션 - 마운트되어 있는 파일시스템을 다른 위치에 한번 더 마운트.

$ sudo mount -v --bind /mnt/mymount /tmp/mydir

/mnt/mymount on /tmp/mydir type none (rw,bind)

 

$ mount | grep /mnt/mymount

/dev/sdb1 on /mnt/mymount type ext4 (rw)

/mnt/mymount on /tmp/mydir type none (rw,bind)

☞ 동일한 파일시스템을 서로 다른 두 개의 마운트 지점에서 접근할 수 있게 되었다.

☞ 새로운 마운트 지점 역시 기존과 같은 옵션을 사용.

 

--move 옵션 - 마운트되어 있는 파일시스템의 마운트 지점을 다른 위치로 이동.

$ sudo mount -v --move /mnt/mymount /tmp/mydir

/mnt/mymount on /tmp/mydir type none (rw)

 

$ mount | grep /dev/sdb1

/dev/sdb1 on /tmp/mydir type ext4 (rw)

 

 

 

[ fstab 파일에 기술되어 있는 파일시스템을 마운트 하는 세 가지 방법 ]

mount -a [-t type] 라고 하면 fstab 에서 기술되어 있는 모든 파일 시스템을 마운트 시킨다.

② 그냥 디바이스명만 써주거나 또는 마운트 포인트(마운트될 디렉토리)만 적어주면 된다.

$ sudo mount -v /dev/sdb1

디바이스명을 사용해 파일시스템 마운트

$ sudo mount -v /mnt/mymount

마운트 지점을 사용해 파일시스템 마운트

③ 다음과 같이 fstabuser라는 옵션이 적혀 있다면, 누구든 마운트 가능.

/dev/sdb1 /data ext4 ro,user,noauto,async 0 0

 

 

 

[ 루프백 마운트 ]

♧ 파일을 블럭 디바이스 처럼 엑세스 할 수 있게 해주는 가상의 장치.

 

스왑 파일을 생성하는 것처럼, 일반 파일시스템도 파일 속에 생성할 수 있다.

이러한 가상 파일시스템은 루프백 마운트라고 하는 방법으로 마운트 해야 한다.

(다운로드받은 리눅스 설치 CD또는 라이브 CD등을 마운트하려는 경우)

 

▷ loop장치가 명시되지 않으면 ( -o loop라는 옵션만 주면)

mount는 사용하지 않은 loop장치를 찾아서 사용

 

▶ CD 이미지파일(iso9660)을 시스템에 마운트

$ sudo mount -v -t iso9660 -o loop /tmp/myimage.iso /mnt/mymount

mount: going to use the loop device /dev/loop0

/tmp/myimage.iso on /mnt/mymount type ext3 (rw, loop=/dev/loop0)

loop : 명시적으로 /dev/loop* 를 지정하지 않으면 사용하지 않는 loop 디바이스를 자동으로 지정.

 

▶ USB 디스크 부트 이미지 파일을 시스템에 마운트.

$ sudo mount -v -o loop /tmp/diskboot.img /mnt/mymount

mount: going to use the loop device /dev/loop0

mount: you didn't specify a filesystem type for /dev/loop0

I will try type vfat

/tmp/diskboot.img on /mnt/mymount type vfat (rw,loop=/dev/loop0)

 

♧ 루프백 디바이스 상태에 관한 정보를 보고 싶다면 losetup 명령 사용.

▶ 마운트된 루프백 디바이스를 보여준다.

$ sudo losetup /dev/loop0

/dev/loop0: [0807]:1009045 (/tmp/diskboot.img)

 

▶ 마운트된 루프백 디바이스를 강제로 언마운트

$ sudo losetup -d /dev/loop1

☞ 만약 루프백 마운트에 문제가 발생해 언마운트할 수 없다면 다음 명령어를 사용하여 분리작업 시도

 

 

 

 

■ umount 명령어를 사용해 파일시스템 언마운트 하기

♧ 파일시스템의 마운트 해제는 umount명령을 사용한다.

 

umount [-hV]

 

    umount -a [-dflnrv] [-t vfstype] [-O options]

    umount [-dflnrv] {dir | device}...

 

 

umount 명령 기본적인 사용 예:

♧ 마운트와 마찬가지로 디바이스명 또는 마운트 지점을 이용해 언마운트 할 수 있다.

bind 옵션(하나의 디바이스, 여러 개의 마운트 지점)으로 마운트 했을 경우 발생할 수 있는 혼란을 피하고 싶다면

가급적 마운트 지점을 이용해 언마운트 하도록 한다.

 

▶ 디바이스명을 사용해 언마운트.

$ sudo umount -v /dev/sda1

/dev/sdb1 umounted

 

▶ 마운트 지점을 사용해 언마운트.

$ sudo umount -v /mnt/mymount/

/tmp/diskboot.img umounted

 

▶ 언마운트가 되지 않을 경우

$ sudo umount -v /mnt/mymount

umount: /mnt/mymount: device is busy.

(In some cases useful info about processes that use

the device is found by lsof(8) or fuser(1))

☞ 만약 디바이스가 사용 중이라면 'device is busy' 라는 메시지가 출력되면서 언마운트할 수 없을 것.

(실패하는 일반적인 원인으로, 마운트된 파일시스템의 디렉토리를 사용하고 있는 쉘이 실행중인 경우가 많음)

 

드물지만 'device is busy'의 정확한 원인을 알 수 없을 경우 :

/* mymount 파티션에 열려있는 파일을 찾는다 */

$ sudo lsof | grep mymount

bash 9341 devanix cwd DIR 7,0 4096 2 /mnt/mymount

☞ devanix 유저가 실행한 PID 9341이 bash 쉘 프로세스가 마운트 지점을 사용하고 있다는 것을 확인.

(결국 이 bash 프로세스가 mymount 파티션의 언마운트를 방해하고 있었던 것)

 

▶ -l 옵션 : 지연된 언마운트(lazy umount) 사용.

/* 지연된 언마운트를 실행 */

$ sudo umount -vl /mnt/mymount/

☞ 'device is busy'로 언마운트할 수 없을 때,

이를 해결하기 위한 또 다른 방법으로 지연된 언마운트(lazy umount)가 있다.

☞ 지연된 언마운트(lazy umount)는 디바이스가 사용되지 않을 때까지 대기한 후에

디렉토리 트리로부터 파일시스템을 언마운트한다.

 

▷ 그밖에 이동식 저장장치를 언마운트할 때에는 eject 명령어를 사용할 수 있다.

eject를 사용하면 CD파일시스템이 언마운트되고 드라이브에서 CD가 자동으로 배출 된다.

$ sudo eject /dev/cdrom

 

Posted by devanix
2011. 8. 9. 05:00

■ fstab - 파일 시스템에 대한 정보를 고정적으로 저장

/etc/fstab 파일은 보통 리눅스 설치단계에서 루트 파일시스템과 시스템에서 사용될

다른 파일시스템 정보를 바탕으로 자동적으로 만들어 진다.

fstab 파일은 리눅스에서 사용하는 파일시스템 정보를 고정적으로 저장하고 있는 파일로

시스템이 부팅될 때 자동으로 마운트되거나 사용자가 직접 마운트한다.

fstab파일의 정보가 조금이라도 잘못되면 부팅과정의 파일시스템 마운트 단계에서 멈춤.

 

◈ /etc/fstab 파일 예제:

<file system>

<mount point>

<type>

<options>

<dump>

<pass>

/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

/dev/sda1

/mnt/windows

vfat

noauto

0

0

( 직관적으로 보기 위해UUID 목록 제외 )

☞ 루트 파일시스템(/) 과 스왑 파티션(swap)의 경우 논리적 볼륨 관리자(LVM)의 볼륨으로 설정.

- LVM은 볼륨 ID는 그대로 유지하면서 물리적인 파티션들을 이동시키거나 연결하기 쉽도록 만들어 줌.

☞ 여러 가상 파일시스템(물리적 파티션이 없는 파일시스템)으로 구성.

- devpts(pts 가상 터미널 인터페이스)

- sysfs(커널 2.6에 관한 정보 제공 통로)

- proc(커널 2.6 이전에 구현된 커널 정보 제공 통로) 등

☞ 마지막 /dev/sda1 디스크 파티션의 경우, 하드디스크에 있는 윈도우 파티션을 마운트하기 위해 사용자가 직접 추가.

 

※ 과거 리눅스 버전과 달리 /etc/fstab 파일에서는 이제 더 이상 이동식 저장장치 정보를 관리하지 않음.

이러한 이동식 저장장치들은 하드웨어 추상화 계층(Hardware Abstraction Layer, HAL)이라고 하는

시스템에 의해 자동적으로 검색된 후, /media 디렉토리에 생성된 전용 마운트 지점

(디바이스 볼륨 ID 정보 등을 바탕으로 생성)에 마운트 된다.

- 필요하다면 /etc/fstab 파일에 자신만의 하드디스크 또는 이동식 저장장치 파티션에 대한 정보 추가.

- 원격지 파일시스템(NFS, 삼바 등) 역시 /etc/fstab 파일에 포함될 수 있음.

 

◈ /etc/fstab 파일의 필드

필 드

설 명

1 <file system>

파일시스템을 대표하는 디바이스명:

⇒ 마운트되는 파티션의 디바이스명(/dev/sda1와 같은) 표시.

(그러나 최근에는 디바이스명 대신 LABEL 또는 UUID를 사용)

2 <mount point>

파일시스템이 마운트될 위치:

⇒ 마운트된 파일시스템의 모든 디렉토리 트리구조와 저장된 데이터가 이 지점과 연결.

3 <type>

파일시스템 유형:

⇒ ext?, tmpfs, devpts, sysfs, swap, vfat, hfs, ufs …와 같은 파일시스템 장치 종류

/proc/filesystems에서 리눅스에서 현재 사용하고 있는 지원가능한 파일시스템 확인

4 <options>

마운트 옵션:

⇒ 파일시스템을 용도에 맞게 사용하기 위한 파일시스템 속성 설정.

⇒ defaults, auto, exec, suid, ro, rw, user, nouser 등 (man mount 에서 -o 옵션 참조)

5 <dump>

파일시스템 덤프 여부: ( 0 또는 1의 값을 가짐)

dump 명령을 사용하여 백업을 수행할 때에만 의미가 있다.

숫자 0 : dump 명령으로 덤프 되지 않는 파일시스템.

숫자 1 : 데이터 백업등을 위해 dump가 가능한 파일시스템.

6 <pass>

파일시스템 검사 여부:

fsck 명령을 사용한 무결성 검사가 필요한지 여부를 가리킨다.

숫자 0 : 해당 파일시스템에 검사가 필요 없음 (fsck가 실행 되지 않음)

숫자 1 : 먼저 파일시스템 검사가 필요 (루트 파일시스템)

숫자 2 : 루트 파일시스템을 제외한 나머지 파일시스템을 의미

 

 

[ 디바이스명 대신 UUID를 사용하자 ]

♧ 하드디스크를 추가한 후 드바이스명이 순서가 바뀔 수 있다.

이런경우 하드디스크의 고유한 UUID 를 이용하면 바뀌는 것에 신경을 쓰지 않아도 된다.

 

fstabdata용으로 쓸 /dev/sda3을 마운트 해보자.

 

① fstab에 추가할 디바이스 UUID 확인

$ blkid -o list

device            fs_type label     mount point       UUID

-----------------------------------------------------------------------------------

/dev/sda1     ext4                      /                            01b059a5-5924-4a72-968d-88df4ad60374

/dev/sda2     swap                  <swap>               285a650a-1313-496f-aa6c-9c574c15d912

/dev/sda3     ext4                     /data                    e3853343-ec3b-4933-b0e0-2a872112ed6d

 

② /etc/fstab 파일 편집

# data was on /dev/sda3

UUID=e3853343-ec3b-4933-b0e0-2a872112ed6d     /data     ext4      defaults     0 0

☞ /dev/sda3 디바이스명을 위처럼 UUID=e3853343… 처럼 바꿔주면 된다.

 

이렇게 하면 추후 하드디스크를 추가해서 드라이브문자가 바뀐다고 해도 이상 없이 작동한다.

Posted by devanix
2011. 8. 9. 01:44

♧ 모든 파티션 준비가 끝났다면 이제 각각의 파티션을 원하는 파일시스템으로 포맷.

 

■ mkfs - 리눅스 파일 시스템 만들기

mkfs [ -V ] [ -t fstype ] [ fs-options ] filesys [ blocks ]

 

▷ mkfs 명령어는 아래와 같은 리눅스 파일 시스템을 만든다.

mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.cramfs, mkfs.msdos, mkfs.ntfs, mkfs.vfat … 등등

 

▷ 기본적인 사용 방법 예:

$ sudo mkfs -t ext3 /dev/sdb1

sdb1에 ext3 파일시스템 생성.

$ sudo mkfs -t ext3 -v -c /dev/sdb1

배드 플록 검사와 함께 좀 더 자세한 출력 요구.

$ sudo mkfs.ext3 -c /dev/sdb1

위 명령어와 동일한 경과

 

 

[ 가상 파일시스템 생성 ]

♧ 물리적으로 고정된 디스크 파티션을 직접 생성하지 않고 특정 파일시스템 유형을

테스트 하고자 한다면 가상 파일시스템을 사용할 수 있다.

(라이브 CD를 만들거나 가상 운영체제를 실행하는 경우에 유용)

 

▷ 1GB 크기의 빈 디스크 이미지 파일을 생성 & 포맷 & 마운트

/* 0으로 채워진 1GB 파일 생성 */

$ dd if=/dev/zero of=mydisk count=2048000

2048000+0 레코드 들어옴

2048000+0 레코드 나감

1048576000 바이트 (1.0 GB) 복사됨, 25.8721 초, 40.5 MB/초

 

/* 가상 파일시스템의 크기를 확인 */

$ du -sh mydisk

1001M mydisk

 

/* mkdisk 파일에 파일시스템을 만든다 */

$ mkfs -t ext4 mydisk

mke2fs 1.41.14 (22-Dec-2010)

mydisk is not a block special device.

Proceed anyway? (y,n) y

 

/* 마운트 위치 생성 & 디스크 이미지 마운트 */

$ sudo mkdir /mnt/image

$ sudo mount -o loop /tmp/mydisk /mnt/image

dd 명령어로 204800 블록(약 1GB)의 빈 디스크 이미지 생성.

mkfs 명령어로 사용자가 선택한 유형의 파일시스템을 생성.

→ 실제 블록 디바이스가 아니기 때문에 경고 출력

☞ 가상 파일시스템은 다른 파일시스템과 동일한 방법으로는 마운트 할 수 없다.

→ 마운트할 디렉토리를 생성한 다음, 파일(mydisk)를 루프 디바이스(-o loop)로서 마운트 해야 함

→ mount 명령 실행시 root 권한 필요

 

▶ 가상 파일시스템 /mnt/image 접근 사용.

$ sudo cd /mnt/image

마운트 지점으로 이동

$ sudo mkdir teset

파일시스템에 디렉토리 생성

$ sudo cp /etc/hosts .

파일을 파일시스템으로 복사

$ cd

파일시스템을 벗어난다.

$ sudo umount /mnt/image

파일시스템의 마운트를 해제

☞ 가상 파일시스템의 마운트를 해제한 다음, 파일을 다른 시스템으로 이동시키거나

다른 곳에서 사용하기 위해 CD에 기록해 둘 수 있다.

☞ 만약 이 가상 파일시스템이 더 이상 필요 없다면 단순히 파일을 삭제.

Posted by devanix
2011. 8. 8. 21:09

♧ 디스크 파티션과 관련하여 라벨(label)이라는 용어는 두 가지 다른 의미를 가짐.

디스크 라벨은 parted 출력에서 볼 수 있뜻이 파티션 테이블의 또 다른 이름.

파티션 라벨은 각각의 개별 파티션이 가진 이름을 의미.

 

■ e2label - 리눅스 파일시스템(ext2,ext3,ext4) 라벨 변경.

e2label device [ new-label ]

 

e2label 명령어를 사용하여 파티션의 라벨을 출력.

$ sudo e2label /dev/sda2

/home

 

e2label 명령어로 파티션 라벨 설정.

$ sudo e2label /dev/sda2 datapartition

 

/etc/fstab에서도 파티션을 마운트하기 위해 파티션라벨을 사용할 수 있다.

LABEL=/boot

/boot

ext3

defaults

1 2

☞ 그러나 라벨 변경 작업으로 인해 시스템이 부팅하지 못하는 경우를 주의.

 

 

■ findfs - UUID나 LABEL을 이용하여 파일시스템(or 파티션) 찾기

findfs LABEL=label

findfs UUID=uuid

 

▶ findfs 명령어를 사용하여 label 이나 uuid로 파티션 찾기.

$ sudo findfs LABEL=datapartition

/dev/sda2

 

$ sudo findfs UUID=01b059a5-5924…

/dev/sda2

 

Posted by devanix
2011. 8. 8. 07:13

♧ 전통적으로 PC 하드디스크는 마스터 부트 레코드(MBR)가 포함된 32bit PC-BIOS

파티션 테이블을 사용해왔다. 이러한 조건 때문에 파티션 하나의 크기는 최대 2TB

가 한계이며, 각 드라이브당 네 개의 주(primary) 파티션만을 가질 수 있었다.

확장 파티션은 이러한 주 파티션의 개수의 제한을 극복하기 위한 방법이다.

최근에는 2TB파티션 용량 제한을 해결하기 위해 PC-BIOS 파티션 테이블을

GTP(GUID 파티션테이블)로 대체 하고 있다.

 

기존 디스크 파티션 작업을 위한 표준 명령어로는 fdisk가 있다. 그러나 fdisk는

현재 새로운 GTP 파티션을 지원하지 못하기 때문에 사용빈도가 줄어들 것이다.

대신 적극적으로 지원받고 있는 새로운 명령어인 parted가 부각되고 있다.

 

⌒그래픽 파티셔닝 툴 : gparted, qtparted

 

 

■ fdisk를 사용하여 디스크 파티션 변경

fdisk 명령어는 디스크 파티션을 나열하고 변경하는데 유용한 툴.

 

▶ 파티션 정보 출력

$ sudo fdisk -l

 

Disk /dev/sda: 19.3 GB, 19327352832 bytes

255 heads, 63 sectors/track, 2349 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x0003ed61

 

Device Boot Start End Blocks Id System

/dev/sda1 * 1 2220 17824768 83 Linux

/dev/sda2 2220 2350 1046529 5 Extended

/dev/sda5 2220 2350 1046528 82 Linux swap / Solaris

☞ 리눅스 커널 2.6.20 버전부터 IDESCSI 디스크 모드 /dev/sd? 디바이스명 사용.(여기서 ? 표시는 a,b,c 등)

우분투의 오래된 버전은 SCSI 디스크와 USB디스크만 /dev/sd?를 사용하며,

IDE 하드드라이브는 /dev/hd?를 사용했다.

☞ 특정 디스크에 대한 파티션 목록 출력 : $ sudo fdisk -l /dev/sdb

 

▶ 간략한 fdisk 명령어 사용 예:

$ sudo fdisk /dev/sdb

Command (m for help): m

도움말 출력

Command (m for help): d

Partition number (1-4): 1

파티션 삭제 요청

삭제할 파티션 번호 입력

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-130, default 1): 1

Last cylinder … +size{K,M,G} (1-130, default 130): 130

새로운 파티션 생성

 

확장 파티션

주 파티션

주 파티션 선택

주 파티션 번호 1번 선택

시작 위치 선택(또는 그냥 엔터)

끝 위치 선택 (또는 그냥 엔터)

Command (m for help): a

Partition number (1-4): 1

부팅 가능한 파티션 선택

부팅 가능한 파티션 번호 입력

Command (m for help): t

Hex code (type L to list codes): L

Hex code (type L to list codes): 82

파일시스템 유형 선택

선택할 코드 리스트 출력

스왑 파티션으로 지정

Command (m for help): w

변경 내용 파티션 테이블에 쓰고 종료

 

 

■ sfdisk를 사용하여 파티션 테이블 복사

♧ 디스크 파티션 테이블을 백업하거나 복사하는 경우 sfdisk 사용

 

$ sudo sfdisk -d /dev/sda > sda-table

파티션 테이블을 파일로 복사

$ sudo sfdisk /dev/sda < sda-table

파일로부터 파티션 테이블을 복구

$ sudo sfdisk -d /dev/sda | sfdisk /dev/sdb

디스크에서 다른 디스크로 파티션 테이블 복사

 

 

■ parted를 사용하여 디스크 파티션 변경

fdisk와 같이 parted 역시 디스크 파티션 정보를 확인하거나 변경하는 툴

 

▶ 디스크 파티션 목록 출력

$ sudo parted /dev/sda print

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sda: 19.3GB

Sector size (logical/physical): 512B/512B

Partition Table: msdos

 

Number Start End Size Type File system Flags

1 1049kB 18.3GB 18.3GB primary ext4 boot

2 18.3GB 19.3GB 1072MB extended

5 18.3GB 19.3GB 1072MB logical linux-swap(v1)

 

▶ 대화식 모드

$ sudo parted

GNU Parted 2.3

Using /dev/sda

Welcome to GNU Parted! Type 'help' to view a list of commands.

☞ 특정 디스크 파티션 작업 : $ sudo parted /dev/sdb

 

※ fdisk와는 다르게, parted는 별도의 쓰기 과정 없이 파티션에 변경 작업을 즉시 적용.

따라서 단순히 parted를 종료하는 것으로는 어떠한 변경도 되돌릴 수 없기 때문에 신중하게 작업해야 함.

 

▶ 간략한 parted 명령어 사용 예:

$ sudo parted /dev/sdb

(parted) help mklabel

특정 도움말 자세히 출력

(parted) mklabel msdos

새로운 디스크 레이블 만듬(리눅스: msdos)

(parted) rm

Partition number? 1

파티션 삭제 요청

삭제할 파티션 번호 입력

(parted) mkpart

Partition type? primary/extended? primary

File system type? [ext2]? ext3

Start? 1

End? -1

새로운 파티션 생성

파티션 타입

파일 시스템 타입

시작 위치

끝 위치 (-1: 끝까지 의미)

(parted) print

파티션 테이블 출력

(parted) quit

종료

☞ 명령어와 함께 입력 (예: rm 1, mkpart primary ext3 0 -1)

partedmkpartfs 명령은 ext3 파티션을 제대로 생성하지 못하므로 가급적 사용을 피한다

☞ 일반적으로 partedext3, ext4 파일시스템 지원이 미비 하므로 mkfs.ext? 명령 이용하여 파티션 포맷.

Posted by devanix
2011. 8. 7. 23:48

일시스템은 파일, 디렉토리, 디바이스, 그리고 리눅스 시스템을 구성하는 다른 요소들에

대한 구조적 체계를 제공한다. 리눅스는 다양한 파일시스템 유형을 지원할 뿐만 아니라,

이 파일시스템으로 구성되어 있는 다양한 미디어(하드디스크, CD, USB 디스크, ZIP 드라이브 등) 역시 지원.

 

디스크 파티션과 이들 파티션에 파일시스템을 생성하고 관리하는 작업은 리눅스 시스템 관리에 있어

가장 핵심적인 작업 가운데 하나이다. 파일시스템에 문제가 생길 경우, 컴퓨터 하드디스크 또는

usb 디스크 같은 이동식 저장장치에 저장되어 있는 중요한 데이터를 잃을 가능성이 아주 높기 때문이다.

 

▷ 리눅스에서 요구하는 기본적 파일시스템 환경을 위한 세 개의 파티션 구성

- 부트로더 및 리눅스커널을 저장하는 부트 파티션,

- 루트 파일시스템을 위한 파티션

- 스왑 파티션(RAM에 데이터를 저장할 공간이 부족할 경우 사용)

(3 개의 파티션으로 나누는 것은 항상 이상적인 형태는 아니고, 시스템의 사용목적과 조건에 따라 달라질 수 있음)

 

 

▶ 리눅스에서 지원하고 있는 대표적인 파일시스템 유형들

[ 파일시스템 유형 ]

[ 설 명 ]

ext2

ext3 파일시스템이 개발되기 이전 버전의 파일시스템으로,

(저널링 기능은 제공하지 않음)

ext3

리눅스에서 일반적으로 사용되고 있는 파일시스템으로, 안전한 데이터

관리와 비정상적인 종료 후에 신속하게 재부팅하기 위한 저널링 기능 지원

iso9660

High Sierra 파일시스템(CD-ROM의 초기 표준으로 사용)에 기초한

파일시스템으로, 로그 파일 이름과 다른 정보 (파일 퍼미션, 소유권, 링크)를

지원하기 위한 Rock Ridge 확장을 포함하고 있다.

현재 CD-ROM의 표준 파일 시스템.

jffs2

USB 디스크와 같은 플래시 드라이브를 효과적으로 이용할 수 있도록

고안된 저널링 플래시 파일시스템(JFS)의 두번째 버전(JFFS2).

jfs

IBS OS/2 워프 운영체제에 사용되었던 파일시스템으로,

대용량의 파일시스템과 고성능을 요하는 환경에 적합하도록 개량.

msdos

MS-DOS 파일시스템.

플로피디스크와 같이 오래된 MS-DOS 파일시스템을 마운트할 때 사용.

ntfs

윈도우에서 사용하는 파일시스템의 하나로, 윈도우 시스템

(다중 부팅 환경 또는 이동식 드라이브 등)과 파일을 공유해야 할 때 유용.

ReiserFS

SUSE, Slackware와 다른 리눅스 시스템에서 기본으로 사용하고 있는

저널링 파일시스템.

squashfs

압축되고, 읽기전용의 파일시스템으로 많은 리눅스 라이브CD에서 사용.

swap

데이터가 넘쳐 RAM에 여유가 없을 경우, 임시적으로 넘치는 데이터를

저장하는 목적의 SWAP 파티션에 사용되는 파일시스템.

ufs

썬마이크로시스템즈의 솔라리스와 SunOS 운영체제에서

사용하고 있는 파일시스템

vfat

확장 FAT(VFAT) 파일시스템. 윈도우 시스템 (듀얼 부팅 환경 또는

이동식 드라이브 등)과 파일을 공유해야 할 때 유용.

xfs

고성능을 요하는 환경을 위한 저널링 파일시스템으로, 시스템이 대용량

데이터를 관리할 수 있으며, 초당 수 기가 바이트를 전송할 수 있도록 해줌.

 

☞ 이 표에 소개된 파일시스템뿐 아니라, 네트워크상의 공유를 목적으로 사용되는 파일시스템도 있다.

로컬 시스템에서 보자면 이들 네트워크 공유 파일시스템 역시 ext3, ntfs 등과 같은 파일시스템일 것이다.

그렇지만 이 파일시스템은 모두 Samba(smbfs 또는 cifs 파일시스템 유형), NFS(nfs), NetWare(ncpfs)와

같은 프로토콜을 통해 네트워크에 공유될 수 있다.

 

모든 파일시스템 유형이 새로운 파일시스템에 적합하거나 모든 리눅스 버전에서 지원되는 것은 아니다.

예를 들어, minix(Minix 시스템용), befs(BeOS 시스템용), affs(Amiga 시스템용) 같은 파일시스템들은

이들 시스템에서 사용되었던 오래된 백업 미디어를 마운트하거나 접근해야 할 경우에만 유용하다.

물론 유명한 파일시스템이라고 해서 완전히 지원되는 것은 아니다.

reiserfs 파일시스템은 우분투 버전 중 Kubuntu에서 쓰기 기능이 지원되지 않는다.

 

Posted by devanix
2011. 8. 7. 19:42

♧ 소프트웨어 패키지나 CD 또는 DVD 이미지와 같은 파일을 인터넷을 통해 공유 하고자 할 때,

SHA1SUM 또는 MD5SUM 파일이 함께 배포되는 경우가 많다.

이러한 파일은 다운로드 받은 파일이 원본 파일과 정확히 동일한 파일인지 확인하는데

사용되는 파일로써, 체크섬(checksum) 정보가 포함되어 있다.

 

MD5 (128 비트) 체크섬을 확인

SHA1 (160 비트) 체크섬을 확인

 

md5sum [ OPTION ]... [ FILE ]...

sha1sum [ OPTION ]... [ FILE ]...

[ 옵션 ]

-b, --binary

바이너리 모드로 읽기

-c, --check

파일에 (md5, sha1) 합계를 읽고 체크.

-t, --text

텍스트 모드로 읽기 (기본값)

체크섬을 검증 하는 경우의 옵션

--quiet

체크섬 검증이 성공한 메시지는 출력 안함

 

 

▶ md5sum, sha1sum 명령어를 사용해 파일의 체크섬을 생성.

$ touch devanix

$ md5sum devanix

d41d8cd98f00b204e9800998ecf8427e devanix

$ sha1sum devanix

da39a3ee5e6b4b0d3255bfef95601890afd80709 devanix

☞ 파일의 유효성을 검증하기 위해 md5sum 또는 sha1sum 정보 중 무엇을 선택할지는 전적으로 배포자의 결정.

 

Xubuntu 11.04 (Natty Narwhal) 배포판 사이트에서 MD5SUMS 파일 검증.

/* Xubuntu 11.04(Natty Narwhal) 다운 */

$ wget http://cdimage.ubuntu.com/xubuntu/releases/11.04/release/xubuntu-11.04-desktop-i386.iso

--2011-08-07 18:57:05-- http://cdimage.ubuntu.com/xubuntu/releases/11.04/release/xubuntu-11.04-desktop-i386.iso

Resolving cdimage.ubuntu.com... 91.189.92.164

접속 cdimage.ubuntu.com|91.189.92.164|:80... 접속됨.

HTTP request sent, awaiting response... 200 OK

Length: 722745344 (689M) [application/x-iso9660-image]

Saving to: `xubuntu-11.04-desktop-i386.iso'

 

100%[==========================================>] 722,745,344 6.70M/s in 2m 51s

2011-08-07 18:59:57 (4.03 MB/s) - `xubuntu-11.04-desktop-i386.iso' saved [722745344/722745344]

 

/* 해당 사이트 MD5SUMS 파일 다운 */

$ wget http://cdimage.ubuntu.com/xubuntu/releases/11.04/release/MD5SUMS

--2011-08-07 19:03:00-- http://cdimage.ubuntu.com/xubuntu/releases/11.04/release/MD5SUMS

Resolving cdimage.ubuntu.com... 91.189.92.174

접속 cdimage.ubuntu.com|91.189.92.174|:80... 접속됨.

HTTP request sent, awaiting response... 200 OK

Length: 266 [text/plain]

Saving to: `MD5SUMS'

 

100%[==========================================>] 266 --.-K/s in 0s

2011-08-07 19:03:01 (5.88 MB/s) - `MD5SUMS' saved [266/266]

 

/* 체크섬 파일(MD5SUMS) 내용 보기 */

$ cat MD5SUMS

ab4b5b18892afd8d4d3228fbc30061d9 *xubuntu-11.04-alternate-amd64.iso

d5b6d8595c44e9954ebc4f188cb9fb49 *xubuntu-11.04-alternate-i386.iso

f1b224166bea923042e53b0e9d5ff63f *xubuntu-11.04-desktop-amd64.iso

78719bfee11576729a62b4a241d40b19 *xubuntu-11.04-desktop-i386.iso

 

/* MD5SUMS 파일에 기록되어 있는 모든 파일을 한 번에 검증 */

$ md5sum -c MD5SUMS

md5sum: xubuntu-11.04-alternate-amd64.iso: 그런 파일이나 디렉터리가 없습니다

xubuntu-11.04-alternate-amd64.iso: 열기 또는 읽기 실패

md5sum: xubuntu-11.04-alternate-i386.iso: 그런 파일이나 디렉터리가 없습니다

xubuntu-11.04-alternate-i386.iso: 열기 또는 읽기 실패

md5sum: xubuntu-11.04-desktop-amd64.iso: 그런 파일이나 디렉터리가 없습니다

xubuntu-11.04-desktop-amd64.iso: 열기 또는 읽기 실패

xubuntu-11.04-desktop-i386.iso: 성공

md5sum: 경고: 3 중 4 개의 파일들을 읽을 수 없었음

 

/* 체크섬 파일에 있는 파일 목록 중 하나만을 검증 */

$ cat MD5SUMS | grep *desktop-i386* | md5sum -c

xubuntu-11.04-desktop-i386.iso: 성공

MD5SUMS 파일 대신 SHA1SUMS 파일을 가지고 있더라도, sha1sum 명령어와 동일

 

 

[ /etc 디렉토리의 모든 파일에 대한 체크섬 생성 & 검증 ]

♧ find 명령어와 md5sum 명령어를 함께 사용한다면 파일시스템의 어떠한 부분이라도 검증할 수 있다.

 

① /etc 디렉토리의 모든 파일에 대한 md5 체크섬 생성

$ sudo find /etc -type f -exec md5sum {} \; > /tmp/md5.list 2> /dev/null

128비트 체크섬이 기록된 /tmp/md5.list 파일 생성.

 

② 시간이 지난 뒤, 이들 중 어떤 것이 변경 되었는지 확인

$ sudo md5sum --quiet -c /tmp/md5.list

/etc/hosts.allow: 실패

md5sum: *경고*: 1588 중 1개가 서로 일치하지 않는 체크섬으로 계산됨match

☞ 결과에서 볼 수 있듯이, 하나의 파일(hosts.allow)만 변경 되었다.

☞ 필요 하다면 다음 단계로 변경된 파일을 조사하여 의도적인 것인지 살펴본다.

 

 

맨 페이지(manpage) 참조 : md5sum, sha1sum

Posted by devanix