시스템 사양
CPU : intel E3400 Dual Core
RAM : DDR2 512Mb
M/B : intel G31 Chipset Foxconn Mainboard
HDD : Seagate ST2000DL003 SATA3 2TB * 6EA
OS : CentOS 4.7 32bit. 2.6.9-78.0.22.ELsmp kernel

XFS 파일시스템 장점
1) 진정한 64Bit Filesystem 이다
2) 이론상 64Bit OS에서 900만 TB까지 지원한다. 32Bit OS에선 16TB까지 지원
3) 사용가능한 inode 수가 많다. 같은 용량에서 EXT3에 비해 8배 많은 inode 생성 가능
4) xfs_growfs 유틸을 통해 마운트된 상태에서도 파일시스템 확장이 가능하다.
5) 경이적인 파일시스템생성(포맷)속도. 몇 백메가를 하든 수십테라를 하든 2초면 끝.
6) 파일시스템 체크속도가 사용중인 inode만을 대상으로 하기 때문에 빠르다. EXT3의 경우 사용하지 않는 부분까지 체크한다.
7) 동일조건의 파일 삭제시간 또한 EXT3에 비해 2.5배 가량 빠르다.
8) 안정적이다. 많은 상용 사이트에서 검증 되었다.

XFS 파일시스템 단점
1) 작은 사이즈의 파일에서 느리다. 자잘한 파일은 JFS 파일시스템이 더 좋은성능을 발휘.
2) 파일시스템 확장은 가능하나 축소는 안된다.
    어짜피 데이터 무결성을 위해 백업을 해야하므로 다른 파일시스템에서도 축소는 무의미하다.
3) 주류 파일시스템이 아니다보니 이식성이 좀 떨어진다.
4) 파일시스템에 문제가 생겼을경우 커널메시지가 제대로 안올라온다는 실무에서 들리는 얘기가 있음.
    메시지가 올라왔을땐 이미 깨져서 맛일 갔을때라고 함.
6) 디버그 옵션 없음. 따라서 삭제된 파일은 복구가 불가능.
7) 파일시스템이 깨졌을때 xfs_repair를 실행시 물리적 메모리나 swap이 2TB당 1G 이상이 되어야 repair 실행이 가능.
8) 별도의 데몬이 관리를 한다. 이건 단점이라기보단 심리적 불안감이랄까.. 아래 참고.
[root@XFStest-local ~]# ps aux | grep xfs
root      2359  0.0  0.0     0    0 ?        S<   15:05   0:00 [xfslogd/0]
root      2360  0.0  0.0     0    0 ?        S<   15:05   0:01 [xfslogd/1]
root      2361  0.0  0.0     0    0 ?        S<   15:05   0:00 [xfsdatad/0]
root      2362  0.0  0.0     0    0 ?        S<   15:05   0:00 [xfsdatad/1]
root      2363  0.0  0.0     0    0 ?        S    15:05   0:03 [xfsbufd]
root      4402  0.0  0.0     0    0 ?        S    15:43   0:00 [xfssyncd]

1. XFS 파일시스템 준비하기
CentOS 4에 XFS 파일시스템을 적용시키기 위해서 먼저 아래 3가지 rpm을 깔다.
1) xfsprogs-2.9.4-1.el4.centos
2) xfsprogs-devel-2.9.4-1.el4.centos
3) kmod-xfs-smp-0.4-2.el4
간편하게 yum으로 깔아주면 된다.
yum install -y xfsprogs xfsprogs-devel kmod-xfs-smp
설치 후 리부팅 없이 바로 XFS 파일시스템이 적용된다.
또한 xfsdump를 추가로 깔아주면 온라인 조각모음, 파티션덤프 등의 부수적인 작업을 할 수 있다.

2. 파티션세팅
fdisk로 파티션테이블 생성 후 ID를 8e(Linux LVM)로 변경 후 저장하면 된다.
생성 후 파티션리스트를 보면 아래와 같다.
[root@XFStest-local ~]# fdisk -l
Disk /dev/sda: 2000.3 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          10       80293+  83  Linux
/dev/sda2              11          75      522112+  82  Linux swap
/dev/sda3              76         140      522112+  83  Linux
/dev/sda4             141      243201  1952387482+   5  Extended
/dev/sda5             141         460     2570368+  83  Linux
/dev/sda6             461         558      787153+  83  Linux
/dev/sda7             559         574      128488+  83  Linux
/dev/sda8             575      243201  1948901346   8e  Linux LVM

Disk /dev/sdb: 2000.3 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      243201  1953512001   8e  Linux LVM

Disk /dev/sdc: 2000.3 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1      243201  1953512001   8e  Linux LVM

Disk /dev/sdd: 2000.3 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1      243201  1953512001   8e  Linux LVM

Disk /dev/sde: 2000.3 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1               1      243201  1953512001   8e  Linux LVM

Disk /dev/sdf: 2000.3 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdf1               1      243201  1953512001   8e  Linux LVM

참고로 /dev/sda는 OS용 HDD이며 sda~sdd 까지는 보드 내장형 SATA 포트에, /dev/sde 와 /dev/sdf는 USB TO SATA&IDE 장치를 이용하여 USB로 연결하였다.
만약 단일 디스크가 2TB가 넘을경우 기존 MBR 방식의 파티션이 아닌 GPT를 이용해야 하며, parted 유틸리티를 사용해야 된다.

3. LVM 세팅
pvcreate /dev/sda8 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
vgcreate lvm_0 /dev/sda8 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
vgdisplay  ---> Free  PE 값을 알아낸다.
lvcreate -l 'FreePE값' -n home lvm_0

4. 파일시스템 생성(포맷), 마운트하기
/etc/fstab에 아래 한줄 추가.
/dev/lvm_0/home   /home    xfs   defaults,noexec,nosuid,nodev,noatime,nodiratime,osyncisdsync,logbufs=8,usrquota,grpquota 1 1
아래 둘중의 한개 방식으로 포맷한다.
mkfs.xfs -l size=32m -d agcount=4 /dev/lvm_0/home   ---> 2002년도 IBM 문서에서 발췌
mkfs.xfs -b size=512 -l size=32m -d agcount=4 -n size=16k /dev/lvm_0/home       ---> 2008년도 KLDP에서 발췌
(만약 파일시스템이 이미 존재한다는 메시지가 나오면 기존 파일시스템을 무시하는 옵션인 -f를 사용하면 강제로 포맷한다)
mount /home

* mount 옵션 설명 :  osyncisdsync - XFS의 동기/비동기 작동을 조작, logbufs=8 - XFS에서 쓰이는 옵션으로 로그용 버퍼의 갯수를 할당, noatime - 파일에대해 aceesstime을 기록하지 않음. nodiratime은 디렉토리에 대해서. noatime이 성능에 영향을 미친다.
* mkfs.xfs 옵셥 설명 : -b 블럭사이즈를 512바이트로, -l 저널링 로그의 크기를 32MB로, FS에 있는 allocation group을 4개 할당

* mkfs.xfs -d su=256k,sw=6 -l version=2 /dev/sdc1
---> SATA3 7200 RPM Hitachi 2TB HDD 7개로 Raid5. Stripe Size=256K로 구성한 시스템에서 위와 같이
옵션을 주고 파일시스템 생성함. 적용한 사이트는 근아인쇄 임. 이 옵션으로 생성한게 일상적인 경우에 가장 적합 한 듯.

아래는 옵션에 대한 상세한 메뉴얼임.
http://linux.die.net/man/8/mkfs.xfs
http://blog.daum.net/_blog/BlogTypeView.do?blogid=0YtzE&articleno=2&_bloghome_menu=recenttext#ajax_history_home

5. LVM 확장하기
먼저 붙이려는 블럭디바이스를 fdisk나 parted로 lvm 파티션닝한다.
umount 하기(xfs 파일시스템은 안해도 상관없다)
umount /home
pvcreate /dev/sdf1
vgdisplay -v
vgextend lvm_0 /dev/sdf1
lvextend -l +FreePE값 /dev/lvm_0/home
mount /home  --> 마운트를 안하면 xfs_growfs에서 마운트가 안되어있다고 에러남
xfs_growfs /dev/lvm_0/home
df -kh  --> 만약 용량이 안 늘었다면 umount /home ; mount /home
끝.

XFS 파일시스템과 LVM & LVM 확장

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다