ubuntu+btrfs+gPXE+iscsi로 Diskless Server 구축하기


Step 1. 하드웨어 준비
서버
서버에는 랜포트가 두개 이상 있어야 합니다. 기가비트 랜포트여야 사용하는데 불편함이 없습니다.
클라이언트
PXE가 지원되는 PC여야 합니다.. LAN은 기가비트여야 합니다.
(100MBps 이더넷으로도 사용은 가능하지만 기가비트에 비해 많이 느립니다)
Step 2. OS 준비
서버
지금 사용하는 OS는 우분투 12.04LTS Server 입니다.
클라이언트
윈도우7, 윈도우8,윈도우 서버 2008 , 리눅스, 또는 OpenElec 를 준비합니다.
윈도XP 이하는 iSCSI를 직접 지원하지 않아 사용할 수 없습니다.
본 강좌에서는 윈도우 8을 이용하겠습니다.
Step 3. Network 설정
/etc/network/interfaces 파일을 다음과 같이 편집합니다.

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth1
iface eth1 inet dhcp

auto eth0
iface eth0 inet static
address   192.168.0.1
netmask   255.255.255.0
broadcast 192.168.0.255
network    192.168.0.0

[/dropshadowbox]

eth1 은 외부 네트워크와 연결됩니다.  isp측에서 자동으로 ip를 받아오게 되어있습니다.
eth0 은 Diskless Client를 위한 내부 네트워크 설정입니다. 192.168.0.1 이라는 주소를 할당했습니다.
Step 4. btrfs-tools 설치

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]

# apt-get install btrfs-tools

[/dropshadowbox]

이미 설치돼있겠지만 혹시 모르니까 관리 도구 패키지를 설치합니다.
이미디스크가 설정 되어 있는 상태라면 btrfs-convert 명령을 이용해서 파티션을 변환해준다.. btrfs-tool은 btrfs 파티션에서만 제대로 작동한다.
btrfs-convert /dev/sda1 <-변환하고 싶은 파티션

 

 

혹시 재부팅 하더라도 자동으로 마운트 되어야하기 때문에 fstab에 등록을 해준다.

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]
root@hannim:~# blkid /dev/sde1/dev/sde1: UUID=”5ee9b839-e651-4263-ac84-40e1ee51fcdc” UUID_SUB=”114eab71-8465-402b-a46c-392af5551c9a” TYPE=”btrfs”
fstab을 열어서 아래처럼 추가 한다.
root@hannim:~# vi /etc/fstab
UID=’5ee9b839-e651-4263-ac84-40e1ee51fcdc’ /pxe btrfs defaults 0 1
[/dropshadowbox]

작업을 위해 마운트를 한다.

roo@hannim:~# mount /dev/sde1 /pxe

Step 5. btrfs Blank Subvolume 생성

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]
# mkdir /pxe/iscsi
# chmod 755 /pxe/iscsi
# btrfsctl -S blank /pxe/iscsi
# chmod 755 /pxe/iscsi/blank
[/dropshadowbox]

/pxe/iscsi/blank 서브볼륨을 생성합니다.
Step 6. Blank target 생성

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]
# dd if=/dev/zero of=/pxe/iscsi/blank/sde.img bs=1048576 count=300000
[/dropshadowbox]

300GB 용량의 전부 0으로 채워져 있는 sde.img 파일을 생성합니다.
Step 7. Win8 target 생성(클론)

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]
# cd /pxe/iscsi
# btrfsctl -s Win8 blank
[/dropshadowbox]

blank 를 Win8 으로 복제(클론)합니다.

복제하면 디스크 용량을 두 배로 차지하는 것처럼 보이지만 실제 디스크 공간을 차지하고 있지는 않습니다. Btrfs의 Copy-on-write 기능 때문에 똑같은 파일을 두 개의 이름으로 참조하고 있을 뿐입니다.
하드-링크하고는 개념이 다른데, 하드-링크의 경우 한쪽에서 데이터가 수정되면 둘 다 영향을 받지만 Btrfs의 클론은 한쪽만 영향을 받습니다.
Btrfs는 이렇게 복제된 세트에 변경이 발생할 경우 변경된 부분만 저장합니다.
Step 8. iscsitarget 설치

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]
# apt-get install iscsitarget
[/dropshadowbox]

디스크리스 클라이언트에게 볼륨을 제공할 iscsi target을 설치합니다.
Step 9. iscsitarget 설정
/etc/default/iscsitarget 파일의 ISCSITARGET_ENABLE 을 true 로 바꿉니다.

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]
ISCSITARGET_ENABLE=true
[/dropshadowbox]

/etc/iet/ietd.conf 파일의 맨 마지막에 다음을 추가합니다.

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]
Target iqn.1991-01.com.example:Win8
Lun 0 Path=/pxe/iscsi/Win8/sde.img,Type=fileio
Alias Win8
MaxConnections  1
[/dropshadowbox]

Target iqn 부분의 1991-01 은 도메인 획득 년도를 의미하지만 그냥 아무거나 써도 됩니다.

그 뒤의 com.example 은 example.com 이라는 도메인을 역순으로 적은 것으로, 이것 역시 아무거나 써도 됩니다. 꼭 해당 도메인을 획득해야 하는 건 아닙니다.
Lun 0 로 시작하는 부분의 Path 부분은 아까 클론을 만들었던 그거고요, Type은 항상 fileio 입니다.
Alias와 MaxCommections 는 생략해도 됩니다.
CHAP 인증이 필요하신 분은 iscsi 를 자세히 설명하는 다른 문서를 참고하세요.
다 됐으면 iscsitarget을 시작합니다.

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]
# service iscsitarget restart
[/dropshadowbox]

에러 메시지가 없어야 합니다.
Step 10. gPXE 다운로드

 

http://www.rom-o-matic.net/gpxe/gpxe-git/gpxe.git/contrib/rom-o-matic/ 에서 아래처럼 세팅하고 를 다운로드받습니다.

gpex_download

다운받은 파일을  gpex.kpxe 로 변경하고 /tftpboot 디렉토리에 넣어둡니다. 다운받은 직후의 파일명은 아마 gpxe-1.0.1+-gpxe.kpxe 와 같이 돼 있을 겁니다. gpex.kpxe 로 이름을 바꿉니다.

현재 우분투 서버 에디션이 설치된 머신에서 직접 다운로드받기 어려우니까  SFTP 로 올리시던지 하세요.

아니면 웹서버에 올려놓고 wget 으로 받아오시거나요. 더 이상의 자세한 설명은 생략합니다.

 

아직 /tftpboot 디렉토리가 없을껏이다. 나중에 tftp를 설치 하게 되면 만들어야 하는 폴더인데,, 지금 필요하니 만들기 먼저 해야겠다.

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]
#mkdir /tftpboot
#chmod 777 /tftpboot
[/dropshadowbox]

Step 11. dhcpd 설치

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]
# apt-get install isc-dhcp-server
# apt-get install tftpd xinetd tftp
[/dropshadowbox]

클라이언트 PC의 NIC 있는 Boot ROM은 최초 부팅할 때 DHCP를 통해 IP를 입력받아야 합니다. 이를 위해서는 주위에 DHCP서버가 있어야 합니다.
공유기도 DHCP기능을 하지만 우리는 공유기의 DHCP보다 좀 더 고급기능을 써야 하므로 DHCP서버를 따로 설치합니다.
따라서 공유기는 클라이언트와 다른 네트웍에 물려있어야 합니다. 아까 서버에 이더넷 포트가 두 개 이상 필요하다고 한 게 이것 때문입니다. 물론 공유기가 없더라도 로컬 기가비트 네트워크를 위해서 이더넷 포트는 두 개 이상 필요합니다.
Step 12. dhcpd 설정
 /etc/dhcp/dhcpd.conf 파일에 아래의 설정을 추가합니다.

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]
subnet 192.168.0.0 netmask 255.255.255.0 {
range dynamic-bootp 192.168.0.2 192.168.0.254;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
}

host Win8 {
hardware ethernet 08:00:2B:86:55:DB;
fixed-address 192.168.0.13;
option host-name “Win8”;
if exists user-class and option user-class = “gPXE” {
filename “”;
option root-path “iscsi:192.168.0.1::::iqn.1991-01.com.example:Win8”;
} else {
filename “gpex.kpxe”;
}

}
[/dropshadowbox]

08:00:2B:86:55:DB 가 아까 적어놓으라고 했던 클라이언트의 MAC주소입니다.

위의 서브넷 부분은 공유기 대체를 위해 그냥 있는 겁니다. 필요없으면 지워도 됩니다.
option root-path 부분을 유심히 봐 주세요. 저게 아까 /etc/iet/ietd.conf 에서 지정했던 Win8을 위한 타겟 주소입니다.
Step 13. tftpd 설정
/etc/xinetd.d/tftp 파일을 편집합니다.

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]
service tftp
{
disable         = no
socket_type     = dgram
protocol        = udp
wait            = yes
user            = nobody
server          = /usr/sbin/in.tftpd
server_args     = -s /tftpboot
}
[/dropshadowbox]

아마 disable=yes 를 no 로 바꾸는 정도면 될 겁니다.

 

설마 xinetd 가 안 깔려 있을 리는 없다고 생각합니다만 만에 하나 안 깔려 있을 경우에는 xinetd 설치한 뒤에 tftpd를 재설치하세요.
tftp 재시작 하기

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]
# /etc/init.d/xinetd restart
[/dropshadowbox]

Step 14. dhcpd 시작

[dropshadowbox align=”left” effect=”curled” width=”100%” height=”” background_color=”#c6c0c0″ border_width=”1″ border_color=”#dddddd” ]
# service isc-dhcp-server restart
[/dropshadowbox]


답글 남기기

이메일 주소는 공개되지 않습니다.