티스토리 뷰

Liunx

NO HDD 시스템 구축하기

달려라흰둥아 2016. 5. 29. 18:15
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요

 

역시나 또 오랜만에 글을 올립니다. ^^

 

본인은 노하드 시스템에 관심이 상당히 많은편입니다.

 

가지고 있는 서버를 극대화(투자금 없이)하여 어떠한 일을 시킬지 매번 고민을 하고 있거든요.

 

그중 가장 큰 이유는 유부남이기 때문입니다. ^^

 

용돈을 아껴 시스템을 업그레이드 하고 또한 이 시스템을 어떻게 하면 절약하고 하는지가 저의 최대 관심사라 할수 있습니다.

 

하여 기존의 클라이언트 PC에서 하드디스크를 추출, 이 하드디스크를 써먹을수 있는방법인 노하드 시스템을 구축해보자는것이 목표로 삼아졌습니다.

 

추출한 하드디스크는 당당히 서버에 붙여 데이터 백업용도 및 데이터 저장용으로 소중히 활용할수 있으니깐 말이죠!

 

노하드 시스템을 구축하는 방법은 생각외로 간단합니다. ^^

 

필요한 구성으론 첫째 서버로 사용될 시스템 입니다.

 

서버는 단순하게 부팅용 파일을 심어 클러이언트가 부팅을 하게끔 도와주고 또한 클라이언트가 활용할 데이터 저장소를 제공해주기만 하면 됩니다.

 

저는 우분투 서버 16.04 버전을 활용하여 시스템을 구축하였습니다.

 

두번째 클라이언트입니다.

 

클라이언트 PC는 단순한 시스템에서 하드디스크를 과감하게 빼버리면 됩니다.

 

물론 여기서 중요한것은 PXE 부팅이 가능한 보드이면 더욱더 괜찮겠죠? 하지만 USB 및 CD롬 부팅이 가능해도 사용이 가능합니다만 저는 서버에서 이 역할을 모두 수행하게 구축을 했습니다.

 

그럼 이러한 서버 및 클라이언트로 노하드를 구축하는 방법을 알려드리도록 하겠습니다.

 

주의) 이미지를 첨부하지 못했습니다. 천천히 읽어보시고 오타 없으신지 잘 확인하시고 하시면 됩니다.

 

0. 클라이언트 준비

 

먼저 클라이언트에 하드를 철거하시기전 이미지를 떠놓습니다. ghost로 이미지를 떠놓은 상태에서 서버측 준비가 다되면 이미지를 서버측 이미지에 풀어놓아야 하거든요. 후에 자세히 설명드립니다.

 

1. 서버 셋팅

 

설치부터 조금 다르게 파티션을 잡습니다. ^^

 

우분투 설치시 기본 이외 파티션에 btrfs 파일시스템으로 /iscsi 라는 폴더에 마운트 해주세요 저는 SSD 에 약 160G 정도로 잡았습니다.

 

또한 스왑을 약 4G 정도 줬는데 너무 많이 준것같은 생각이 들기도 합니다... 실제론 그정도 못쓰는듯 한데 말이죠.. (PC방이나 클라이언트 댓수가 50대 이상이면 서버 성능이 짱짱해야 하겠지만 일반 가정내 클라이언트댓수는 작기에 스왑파티션을 작게 잡아도 될듯합니다.)

 

그리고 서버는 고정IP가 되어야 합니다. DHCP 서버를 구동하고 DHCP서버에서 IP를 할당받아 PXE 부팅을 하기 위해서입니다.

 

말로써는 힘들게 느껴질지도 모릅니다. 허나 간단하죠!

 

클라이언트 부팅 -> PXE 부팅준비 -> DHCP 서버에서 IP할당 -> TFTP를 통한 PXE 부팅 -> 부팅에 필요한 파일및 저장소를 할당받기 -> OS 부팅

 

이런 순서죠!

 

그러기 위해서는 우분투 서버의 IP를 고정으로 심습니다.

 

nano /etc/network/interfaces

 

 

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

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto ens160
iface ens160 inet static
address 192.168.0.249
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameserver 192.168.0.1

본인과 eth 번호가 달라도 자신의 서버의 eth 인터페이스에서 고정IP를 심어주시면 됩니다.

 

그리고 이제 DHCP 서버 프로그램을 설치하시면 됩니다.

 

apt-get install isc-dhcp-server

 

그리고 정보를 수정해야겠죠?

 

nano /etc/default/isc-dhcp-server

 

그럼 여기서 INTERFACES="";  이부분을 본인의 인터페이스로 변경합니다. INTERFACES="eth0"; 나 INTERFACES="ens160"; 이런식이죠!

 

자 이제 TFTP 서버를 설치합니다.

 

apt-get install xinetd
apt-get install tftpd
apt-get install tftp

 

그런다음 TFTP가 쓸 폴더를 생성하야 합니다.

 

본인은 tftpboot 이라는 폴더안에 만들었어요

 

mkdir tftpboot

 

이제 권한을 줍니다.

chmod 777 tftpboot
chown nobody tftpboot

 

TFTP가 어느폴더인지 지정해줘야겠죠?

 

 

 

nano /etc/xinetd.d/tftp

 

service tftp
{
 disable         = no
 socket_type     = dgram
 protocol        = udp
 wait            = yes
 user            = nobody
 server          = /usr/sbin/in.tftpd
 server_args     = -s /tftpboot
}


 

본인은 tftp만 설치하였을때 정확한 부팅이 어려웠습니다. 하여 저는 tftpd-hpa / tftp-hpa 도 설치해서 해결했어요.

 

apt-get install tftpd-hpa
apt-get install tftp-hpa

 

nano /etc/default/tftpd-hpa

 

아래와 같이 지정합니다.

 

# /etc/default/tftpd-hpa

TFTP_USERNAME="nobody"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="[::]:69"
TFTP_OPTIONS="--secure"

 

이제 BTRFS-TOOL 및 iscsi 설치를 해줍니다.

 

apt-get install btrfs-tools*

apt-get install -y iscsitarget
apt-get install -y iscsitarget-dkms

 

이제 iscsi 볼륨을 만들어야 합니다 ^^ 여기서는 btrfs 파일시스템아래 해당 이미지를 생성할거에요

 

mkdir /iscsi/image
chmod 755 /iscsi/image

 

win 이라는 btrfs에 win이라는 이름을 가진 볼륨폴더를 생성합니다.

btrfs subvolume create /iscsi/image/win

chmod 755 /iscsi/image/win

 

win 이라는 볼륨내 윈도우 부팅용 이미지를 만들어 봅시다. 아주 간단해요

 

dd if=/dev/zero of=/iscsi/image/win/win.img bs=1048576 count=50000

 

'빈공간의 용량 50G의 파일을 win이라는 볼륨아래 win.img 이미지를 생성해라' 라는 명령입니다.

 

이제 이파일을 클라이언트가 쓸수있게 환경을 조금 바꿔야 합니다.

 

nano /etc/default/iscsitarget

 

ISCSITARGET_ENABLE=true  ---> true 로 변경

 

iscsi 타겟을 생성해야 합니다.

 

nano /etc/iet/ietd.conf

 

Target iqn.subins.co.kr:master                               #iscsi target 이름
 Lun 0 Path=/iscsi/image/win/win.img,Type=fileio     # target이미지 path

 

이제 이렇게 생성된 이미지를 가지고 iPXE를 활용하여 부팅할수있게 설정을 할텐데요

 

오타 주의하시고 파일 수정하셔서 본인에 맞게 설정하시면 됩니다.

 

option space ipxe;
option ipxe-encap-opts code 175 = encapsulate ipxe;
option ipxe.priority code 1 = signed integer 8;
option ipxe.keep-san code 8 = unsigned integer 8;
option ipxe.skip-san-boot code 9 = unsigned integer 8;
option ipxe.syslogs code 85 = string;
option ipxe.cert code 91 = string;
option ipxe.privkey code 92 = string;
option ipxe.crosscert code 93 = string;
option ipxe.no-pxedhcp code 176 = unsigned integer 8;
option ipxe.bus-id code 177 = string;
option ipxe.bios-drive code 189 = unsigned integer 8;
option ipxe.username code 190 = string;
option ipxe.password code 191 = string;
option ipxe.reverse-username code 192 = string;
option ipxe.reverse-password code 193 = string;
option ipxe.version code 235 = string;
option iscsi-initiator-iqn code 203 = string;
# Feature indicators
option ipxe.pxeext code 16 = unsigned integer 8;
option ipxe.iscsi code 17 = unsigned integer 8;
option ipxe.aoe code 18 = unsigned integer 8;
option ipxe.http code 19 = unsigned integer 8;
option ipxe.https code 20 = unsigned integer 8;
option ipxe.tftp code 21 = unsigned integer 8;
option ipxe.ftp code 22 = unsigned integer 8;
option ipxe.dns code 23 = unsigned integer 8;
option ipxe.bzimage code 24 = unsigned integer 8;
option ipxe.multiboot code 25 = unsigned integer 8;
option ipxe.slam code 26 = unsigned integer 8;
option ipxe.srp code 27 = unsigned integer 8;
option ipxe.nbi code 32 = unsigned integer 8;
option ipxe.pxe code 33 = unsigned integer 8;
option ipxe.elf code 34 = unsigned integer 8;
option ipxe.comboot code 35 = unsigned integer 8;
option ipxe.efi code 36 = unsigned integer 8;
option ipxe.fcoe code 37 = unsigned integer 8;
option ipxe.vlan code 38 = unsigned integer 8;
option ipxe.menu code 39 = unsigned integer 8;
option ipxe.sdi code 40 = unsigned integer 8;
option ipxe.nfs code 41 = unsigned integer 8;

option iscsi-initiator-iqn code 203 = string;
option ipxe.no-pxedhcp 1;
option domain-name-servers 192.168.0.1;    -> G/W 입력

authoritative;
allow booting;
allow bootp;

 

subnet 192.168.0.0 netmask 255.255.255.0 {               #네트워크 환경 설정 C클래스 192.168.0.0/24 비트겠죠?
 range dynamic-bootp 192.168.0.100 192.168.0.199;     #DHCP 서버로 할당할 IP 대역입니다. (저는 공유기에서 해당 IP대역에 빼줬어요
 option broadcast-address 192.168.0.255;                  #브로드케스트 주솝니다 보통 255번이 되겠죠?
 option routers 192.168.0.1;                                    #케이트웨이 입니다.
 }

 


 

host Master {                                                        #호스트 네임입력
 hardware ethernet 00:00:00:00:00:00;                         #클라이언트 MAC 어드레스
 fixed-address 192.168.0.101;                                    #클라이언트에게 할당할 IP
 option host-name "Master";                                    #클라이언트 호스트네임 할당
 if exists user-class and option user-class = "iPXE" {       #iPXE 부팅종류
filename "ipxe.ipxe";                                                #TFTP 폴더내 부팅설정파일
 } else {
 filename "undionly.kpxe";                                               #iPXE 부팅파일
 }
 }

 

여기서 오타나면 부팅 안되요.. 천천히 오류뜨지 않는지 잘 보시고 하셔야 합니다.

 

여기서 생성된 host Master 이하 내용들은 DHCP서버에서 부팅할때 입력된 MAC어드레스가 올라오면 IP를 할당과 동시 그 PC만의 부팅이미지를 차별화 두는것이죠.

 

예를들어 가정에서는 사양이 다른 클라이언트들이 존재합니다. 그런 클라이언트들마다 모두 동일하게 설정이 된다면 부팅시 블루스크린을 볼수있겠죠.

 

하지만 다른 원본 이미지에 다른 부팅파일이 존재한다면 각각 PC마다 맞게 제공되어지고 정상적인 부팅이 이루어 지겠죠?

 

여기까지 다하셨으면 거의 큰일은 다끝냈습니다.

 

이제 부팅설정파일을 만들어봅시다.

 

nano /tftpboot/ipxe.ipxe

 

#!ipxe
# Setup timeout
set menu-timeout 2000                                                                                                 #해당메뉴 시간

# menu-default set
isset ${menu-default} || set menu-default win_master                                                           #디폴트 부팅 선택

###################### MAIN MENU ####################################

:start
menu DISKLESS iPXE boot MENU
item --gap --              ------------------------- Operating systems ------------------------------
item --key 1 win_master   1. Windows master
item --gap --              --------------------------------------------------------------------------
item reboot               Reboot computer
choose --timeout ${menu-timeout} --default ${menu-default} selected || goto start
set menu-timeout 0
goto ${selected}


:reboot
reboot

############ MAIN MENU ITEMS ############

:win_master
sanboot iscsi:192.168.0.249::::iqn.subins.co.kr:master || goto start    #서버 IP주소및 iscsi 타겟주소
goto start

 

위와 입력하면 해당 마스터 이미지로 부팅이 됩니다. 추후 원본 이미지 작업이후 스냅샷을 생성할것입니다.

 

이제 마지막 단계인 IPXE.kpxe 파일을 다운받아 /tftpboot 폴더에 넣으면 됩니다.

 

wget으로 ipxe 공식홈페이지에서 다운로드 해보겠습니다.

 

 

다운로드후 모든 서비스 재시작 하겠습니다.

 

service isc-dhcp-server restart
service iscsitarget restart
/etc/init.d/xinetd restart

 

이제 모든 준비 다 되었어요!!

 

아까 만든 win.img 파일이 부팅시 자동으로 연결됩니다. 빈 파일이니깐 지금은 부팅이 안되요..

 

2. 클라이언트

 

해당 이미지를 사용하기 위해선 간단하게 ISCSI 마스터 이미지에 윈도우를 설치해야 합니다.

 

미리 준비하신 GHOST 파일이 있죠? 그파일을 넣을거에요^^

 

어떻게? GHOST32.EXE 파일을 이용해섭니다.

 

먼저 클라이언트를 하드디스크로 부팅을 합니다.

 

제어판 -> 관리도구 -> iSCSI 초기자 실행

 

대상에서 서버 IP를 입력하면 아까 생성해놓은 iqn.subins.co.kr:master 가 보입니다.

 

연결됨으로 변경이되면 디스크관리자에서 해당 파티션을 연결합니다.

 

내컴퓨터 마우스 오른쪽버튼 -> 관리 -> 디스크관리 -> 새로생성된 ISCSI 디스크이미지 -> 디스크초기화

 

이제 마지막 GHOST를 이용하여 윈도우이미지를 ISCSI디스크에 복원합니다.

 

긴 여정이죠? 근데 몇번 해보시면 간단합니다. 저는 WIN8.1 을 설치하여 잘 쓰고 있어요

 

여러분들도 한번 해보시는게 어떨까요?

 

이상 간단한 DISKLESS System을 활용한 서버 HDD확장하기 였습니다.

 

부록으로 윈도우 배포를 통한 ISCSI에 직접 윈도우를 설치하는 방법을 또 알려드리겠습니다.

 

참고 Site :

http://www.ipxe.org

http://clean-pc.co.kr

'Liunx' 카테고리의 다른 글

ESXI 6.0 -> 6.5 업그레이드 + 삽질기  (0) 2017.04.04
PXE를 활용한 윈도우설치하기  (0) 2016.05.30
ESXI 로 시스템을 변경하다.  (1) 2016.05.16
리눅스계열 USB 설치방법  (0) 2015.12.04
tpipe  (0) 2015.11.18
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함