Unix

BTRFS 테스트

ForceCore 2009. 10. 18. 20:24
BTR은 Butter 라고 읽는다. 솔라리스에서 ZFS를 무지무지 부러워 했는데, 그럴 필요는 없을듯. ZFS의 기능을 거의 다 가지고 있는 file system이다. 아직 완성되진 않았다. -_-;;; 미리보기 성격이 강한 글이라고나 할까? 하지만 리누스 토발즈가 자기 노트북에 BTRFS를 쓴다고 하니... 좀 시도해보도록 하겠다. Kernel 소스코드에 병합된지도 올해고 아마 1~2년 내에 ext4처럼 default로 지원하게 될 것이다.

현재는 아직 ext4보다 느리다 ㅡ,.ㅡ; 속도를 원한다면 써서는 안 되는 파일시스템임.

그냥 BTRFS를 쓰기만 하면 좀 재미 없을 듯 해서 -0-...;; 디스크가 여러개인 상황을 가정해보기로 하겠는데... 필자는 컴퓨터가 여러대인 상황을 가정해보려고 한다. -0-;;; 컴퓨터 A, B라고 해보자.

1. B 컴퓨터에서는 NBD로 A에 디스크를 제공해 줄 것. B에선 제공해준 디스크의 내용이 안 보여도 상관 없다. 즉,,. B는 그냥 디스크 용량만 줄 뿐이다 -0-;;
2. A에서는 B에서 제공받는 용량을, 자기 자신의 디스크로 병합해서, BTRFS로 묶어버린다. 엄청나게 큰 용량의 데이터서버로 쓸 수 있고 싶은 것임.
3. raid10으로 묶고 싶다. 1+0, 즉, 미러링을 하여 양 서버에 동일한 데이터가 있어야 하고, 쌍쌍이 미러링 되는 것을 0으로 striping하는 것이다... 앗... 돈이 안 된다 (?) raid0로 묶어보지 뭐 :S 한번에 데이터가 올인나도 별로 상관은 없다고 가정하고.

테스트 환경은 Fedora 11 이다. 귀찮은 짓 안 해도 커널에 btrfs지원이 들어가 있기 때문 (!) 그리고 어차피 가상컴퓨터로 하는 것인지라 OS는 새로 설치해야 되므로.

운영체제는 열심히 설치하고 btrfs-progs 패키지를 설치했다.

우선 마스터 컴퓨터엔...
# mkfs.btrfs /dev/sdb1
으로 btrfs를 생성했... 다 -_- 그리고 양 컴퓨터에
# yum install nbd
...
하나 올인나는것도 아까운데 둘중 하나만 작살나도 망가지는 시스템을 만드는게 무슨 의미가 있지;; CEPH 프로젝트가 성숙하기를 좀 기다려볼것이다 ㅠㅠ

http://forcecore.tistory.com/891 : 이전에 한 스냅샷 실험.
우선은 그냥 BTRFS만 볼까?; 예전에 ZFS 테스트를 했던 것 처럼, 컴퓨터 한 대만 쓸 것이다.
http://btrfs.wiki.kernel.org 우선은 이 페이지가 진리임. -_- 매뉴얼이니까.

이번 테스트에서는 raid10으로 디스크를 점점 추가해 가면 어떻게 될까... 하는 실험이다. 일부러 컴퓨터를 괴롭히기 위해서 2GB 2.5GB, 4GB, 4GB 순으로 점점 디스크를 추가해볼 생각이다. 묶인 것은 용량이 어떻게 되나... 그런 실험인 것이다. 예상은 6GB?

# mkfs.btrfs -m raid10 -d raid10 /dev/sda1
이렇게 가장 작은 것 부터 시작. 용량은 sda < b < c = d 이다.

# mount /dev/sda1 /mnt
잘 된다. df -h 를 하면 2GB가 free인 것으로 나온다. 그래야겠죠?;; 아무리 raid10이라도 디스크가 하나뿐인데 -0-;;

이제 디크스를 추가해 넣자.
# btrfs-vol -a /dev/sdb1 /mnt
# df -h
?? raid 0인거 맞나? /mnt가 4.5GB인걸로 나온다.
# btrfs-vol -b /mnt
이렇게 밸런스 명령을 내려주면... 그래도 4.5GB군;;

다시 mkfs부터 했다.
# mkfs.btrfs -m raid10 -d raid10 /dev/sda1 /dev/sdb1
그런데도 4.5GB 오옷?;; 이게 어떻게 된거지 ㅡ,.ㅡ;;

http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg00758.html
뭘까? 같은 증상에 대해 메일이 있는데...
df 의 거짓말이라고 한다 ㅋㅋㅋ...그렇다면 채울 수 있는 용량을 가지고 해봐야겠군. 우선 디스크 한개를 raid10으로 만들고 거기다 "추가"한 상태를 가지고 해보겠다.
다시 볼륨을 생성하고...
# mkfs.btrfs -m raid10 -d raid10 /dev/sda1
# mount /dev/sda1 /mnt
# btrfs-vol -a /dev/sdb1 /mnt

이제 디스크 용량을 체크.
# cat mp3파일 >> rnd
를 무한 루프 걸어놓고 기다렸다. 그러면 한번 할 때 마다 몇메가씩 파일이 커질 것이다 -0-;;
4.1기가까지 성장했다. -0-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 헐?

이번에는
# mkfs.btrfs -m raid10 -d raid10 /dev/sda1 /dev/sdb1

으로 파티션(?)을 만들고 실험.
3.6GB까지 성장...
??? 이래도 되는거야? ㅋㅋ 그래서. 일부러 디스크 한 개를... 없애보기로 했다?

...
현재 뭐 개발중이라 불안정 하긴 한데.
음... 그 뭐냐. 그... 디스크 하나가 작살나니까 그냥 파티션이 마운트 불가능. raid10이 정확하지 않은건가? 이번엔 raid1으로 해보겠다. 1.8GB에서 멈췄음. 예상대로 더 작은 용량에서 멈춘다.

이제 디스크 하나를 파괴한다.
# umount /mnt
# mkfs.ext4 /dev/sdb1
# mount -o degraded /mnt/dev/sda1 /mnt
를 하니 통했다. -o degraded가 없으면 마운트 안 됨.

# btrfs-vol -a /dev/sdc1 /mnt
를 하면 에러가 잔뜩 뜨고
# btrfs-vol -a /dev/sdb1 /mnt
를 하면 무한루프인듯.
ㅋㅋㅋ... 에러 복구 절차를 잘 따르지 않았기 때문인가?
btrfs-vol -r /dev/sdb1
으로 우선 뻑낸 장비를 없애줘야 한다.
어쨌거나 그렇게 하고 난 뒤에도 /dev/sdc1을 추가하려고 하니깐 에러가 자꾸 난다. 다시 mirroring이 되기 시작해야지 되는거 아닌... 가...?

어쨌거나 디스크를 꾹꾹 채우는 실험, 그리고 그 상황에서 디스크 파괴 실험을 버티지 못했다. 그러면 좀 곤란한데 -0-;;; 실제 서버에서도 용량이 꾹꾹 차기를 기대하고 있기 때문이다. 아직은 좀 더 두고볼 파일 시스템인듯.