안녕하세요. 썬구루입니다. 이번 게시물에서는 fdisk를 이용한 디스크 공간 분할에 대해 알아보도록 하겠습니다.
디스크를 사용하기 위해서 파티션 또는 볼륨을 만들어야 한다. Raw Device를 사용할 수 있지만 그것은 특정 응용프로그램이 사용하는 것이고 대부분의 응용프로그램은 운영체제 커널에 파일시스템 서비스를 요청하도록 되어 있다. 파일 시스템은 디스크의 논리적인 공간 위에 만들어지는데 4TB 디스크를 구매하여 PC에 연결한 후 통으로 잡아 사용하는 경우도 있지만 1TB/3TB, 2TB/2TB 이런 식으로 나눌 것이다. 이렇게 나누어진 공간을 파티션 또는 볼륨이라 하고 디스크 공간을 나누는 작업을 용량 분할 또는 공간 분할이라 한다.
볼륨(Volume)과 파티션(Partition)은 논리적인 공간(또는 디스크)이라는 공통점을 가지고 있지만 서로 다른 차이점을 가지고 있다.
구 분
|
내 용
|
드라이브 (Drive)
|
보통 이것은 물리적인 저장 장치를 말한다. 하드 디스크라고 하지만 하드 디스크 드라이브로도 말한다. 저장 장치라고 하면 하드 디스크(Hard Disk), SSD(Solid-State Disk), USB 메모리 (Removable USB Flash Drive) 등이 있다. 리눅스 디스크 디바이스 파일은 /dev 디렉터리에 존재한다. /dev/sda, /dev/sdb, /dev/sdc.... |
파티션 (Partition)
|
하드 디스크 드라이브를 논리적인 블록 디스크(Logic Block Disk)로 나눌 수 있다. 이러한 논리적 블록 디스크를 파티션이라 한다. /dev/sda1, /dev/sda2.... |
볼륨 (Volume)
|
볼륨도 논리적 블록 디스크이다. 하지만 파티션과 달리 용량에 대한 유연성을 가진다. 볼륨의 공간을 모두 사용했을 때 이를 늘릴 수가 있다. 그리고 볼륨은 여러 파티션을 포함할 수 있다. 볼륨을 관리하기 위해 볼륨 매니저가 사용되는데 리눅스는 LVM이라는 것을 사용한다. /dev/VG/LV... |
여러분이 사용하는 윈도우 운영체제는 디스크 관리를 하기 위해 Veritas Volume Manager를 사용한다. 경량 버전이긴 하지만..
■ fdisk 명령
fdisk는 리눅스 환경에서 디스크의 파티션을 생성, 삭제, 관리하기 위해 사용되는 명령이다.
1). 명령 형식
fdisk [옵션] [DISK Device]
2). 옵션
옵 션
|
내 용
|
-l
|
디스크의 파티션 정보 또는 파티션의 정보를 보기 위해 사용된다. 실제로는 디스크의 파티션 테이블을 보는 것이다. |
3). 내부명령
내부 명령
|
내 용
|
m
|
내부 명령의 도움말을 보여준다. |
p
|
파티션 테이블을 보여준다. |
n
|
새 파티션을 생성하기 위해 사용한다. |
d
|
파티션을 삭제하기 위해 사용한다. |
t
|
파티션 유형을 변경하기 위해 사용한다. Linux, Linux LVM, FAT16 등등... |
l
|
파티션 유형들을 확인하기 위해 사용한다. |
w
|
파티션 테이블 정보를 저장하고 종료하기 위해 사용한다. |
q
|
정보 저장없이 그냥 빠져 나가기 위해 사용한다. |
4). 디스크 관련 디바이스 파일 이름 형식
/dev/sd[X][Y]
sd: SCSI 디바이스를 나타냄
X : 디스크 이름을 나타냄. /dev/sda, /dev/sdb, /dev/sdc...
Y : 디스크의 파티션 번호를 나타냄. /dev/sda1, /dev/sda2, /dev/sdb1...
5). 예제
☞ 디스크 및 파티션 정보 확인
[root@sunguru Packages]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x000b47e1 Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 548 4194304 82 Linux swap / Solaris Partition 2 does not end on cylinder boundary. /dev/sda3 548 2611 16571392 83 Linux Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x00000000 [root@sunguru Packages]# fdisk -l /dev/sda2 Disk /dev/sda2: 4294 MB, 4294967296 bytes 255 heads, 63 sectors/track, 522 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: 0x00000000 [root@sunguru Packages]# |
☞ 20GB 디스크를 5GB 용량과 나머지 용량으로 각각 파티션을 분할함.
[root@sunguru ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xc662cde5. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +5G Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0xc662cde5 Device Boot Start End Blocks Id System /dev/sdb1 1 654 5253223+ 83 Linux Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (655-2610, default 655): Using default value 655 Last cylinder, +cylinders or +size{K,M,G} (655-2610, default 2610): Using default value 2610 Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0xc662cde5 Device Boot Start End Blocks Id System /dev/sdb1 1 654 5253223+ 83 Linux /dev/sdb2 655 2610 15711570 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@sunguru ~]# fdisk -l /dev/sdb Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0xc662cde5 Device Boot Start End Blocks Id System /dev/sdb1 1 654 5253223+ 83 Linux /dev/sdb2 655 2610 15711570 83 Linux [root@sunguru ~]# |
☞ /dev/sdb1 파티션에 EXT4 파일시스템 생성 및 /data01 디렉터리에 마운트 ( 여기에 대한 세부 내용은 파일시스템 생성에서 배우게 될 것이다.)
[root@sunguru ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 20G 0 disk |-sdb1 8:17 0 5G 0 part `-sdb2 8:18 0 15G 0 part [root@sunguru ~]# [root@sunguru ~]# mkdir /data01 [root@sunguru ~]# [root@sunguru ~]# mkfs -t ext4 /dev/sdb1 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 328656 inodes, 1313305 blocks 65665 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1346371584 41 block groups 32768 blocks per group, 32768 fragments per group 8016 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 22 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@sunguru ~]# [root@sunguru ~]# blkid /dev/sdb1 /dev/sdb1: UUID="b380e123-e1ee-4ae2-8ae2-55827b5bae91" TYPE="ext4" [root@sunguru ~]# [root@sunguru ~]# mount /dev/sdb1 /data01 [root@sunguru ~]# [root@sunguru ~]# df -h /data01 Filesystem Size Used Avail Use% Mounted on /dev/sdb1 4.9G 11M 4.6G 1% /data01 [root@sunguru ~]# |
서버시스템 하드디스크 연결 구성도
6). 파티션 테이블을 저장하기 위해 사용되는 MBR과 GPT의 차이.
MBR과 GPT는 하드디스크에 대한 파티션 정보를 저장하기 위해 사용되는 표준이다. 이 둘은 디스크의 첫 번째 섹터 또는 그 이후의 위치에 저장된다. 하지만 MBR 같은 경우 옛날에 사용하던 방식이어서 파티션 크기에 대한 제한을 받는다. 왜냐하면 MBR의 경우 파티션 정보를 저장하기 위해 512 Bytes(Zero Sector)만 사용하기 때문이다. 작은 용량에 많은 정보를 저장할 수 없기 때문이다. MBR 형식을 사용할 경우 디스크 또는 파티션 최대 크기가 약 2.2TB이다. 그 이상은 지원하지 않는다. 요즘은 대용량 파일시스템을 많이 사용하기 때문에 큰 용량의 파티션 정보를 저장하기 위해서는 GPT 방식을 사용해야 한다. GTP는 최대 디스크 및 파티션 크기가 이것은 리눅스뿐만 아니라 윈도우, 유닉스에도 해당된다.
GPT에 대한 좀 더 상세한 정보는 [ 다음 ]을 참고하세요.
만약 큰 용량의 디스크를 fdisk 명령을 사용하여 파티션 분할하려 한다면 아래와 같은 메시지를 보게 될 것이다.
[root@sunguru ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 20G 0 disk ├─sdb1 8:17 0 5G 0 part └─sdb2 8:18 0 15G 0 part sda 8:0 0 20G 0 disk ├─sda1 8:1 0 200M 0 part /boot ├─sda2 8:2 0 4G 0 part [SWAP] └─sda3 8:3 0 15.8G 0 part / sdc 8:32 0 4T 0 disk sr0 11:0 1 4.3G 0 rom /media/CentOS_6.6_Final [root@sunguru ~]# fdisk /dev/sdc Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x8c00f848. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: The size of this disk is 4.4 TB (4398046511104 bytes). DOS partition table format can not be used on drives for volumes larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID partition table format (GPT). |
다음 게시물에선 대용량 디스크에 대해 parted 명령을 사용하여 파티션을 분할하는 방법에 대해 알아볼 것이다.
No comments:
Post a Comment