pfSense를 이용한 OpenVPN-p2p

이번에는 pfSense를 이용하여 두개(혹은 2개이상)의 사이트를 VPN 터널을 이용하여 연결하는 과정을 알아보도록 하겠다.

아래처럼 Site A와B를 연결하여 사설망인 192.168.100.0 네트워크와 192.168.200.0  네트워크를 연결하여

원격지 네트워크의 리소스(프린터,팩스,전화 등등)을 이용하도록 하는 것이다.

아래 설명되는 IP 주소는 아래 그림을 기준으로 한다.

Site A의 pfSense 가 서버 Site B의  pfSense 가 클라이언트가 되어 서로 연동이 되는 과정을 살펴보도록 하자.

OpenVPN 말고도 ipsec등을 이용해서도 연동이 가능하나 일단 가장 간편하게 구성이 가능한  OpenVPN으로 구성해 보도록 하자.

OpenVPN 서버(Site A)

VPN->OpenVPN-> Servers -> Add  를 선택하여 서버를 추가해준다.

일반설정
Server Mode: Peer to Peer(Shared Key)

참고: OpenVPN의 서버모드

  • Peer to Peer (SSL/TLS) – Site to Site 연결모드로 6개 이상의 사이트들을 연동할 때 사용하기를 권장함
  • Peer to Peer(Shared Key) – Site to Site 연결모드로 6개 미만의 사이트들을 공유키를 가지고 연결함.
  • Remote Access (SSL/TLS) – 원격 접속 모드로 인증서를 이용하여 사이트에 연결
  • Remote Access (User Auth) –  원격 접속 모드로 사용자ID와 비번을 이용하여 연결
  • Remote Access (SSL/TLS + User Auth) – 인증서와 사용자 정보를 이용하여 연결

기타 나머지는 그대로 두도록 한다.

암호화 설정

공유키를 생성하도록 하며 여기서 생성된 공유키는  OpenVPN 클라이언트(site B)에서 사용된다.

Shared Key: Checked

아래처럼 shared key가 생성이 된다.

터널설정

Site to Site를 연결하기 위한 설정

IPv4 Tunnel Network: 10.0.0.0/24

* site A와 site B에서 사용하지 않는 네트워크를 하나 생성해서 터널네트워크로 사용한다.

IPv4 Remote Network(s): 192.168.200.0/24 (Site B의 사설망을 적어준다)
Compression: 터널을 통과하는 패킷 압축을 사용할 것인지 여부인데 모르면 그냥 기본값으로 둔다.

Save 를 눌러서 설정을 마친다.

마치고 나서 편집모드로 들어가서  암호화 과정에서 생성한 shared Key를 메모장이나 적당한 곳에 복사해두도록 하자.

이것으로 서버쪽 설정은 모두 마무리 되었다.

 

OpenVPN 클라이언트(Site B)

VPN->OpenVPN->Clients 에 가서 Add를 눌러서 클라이언트를 추가한다.

서버쪽 설정과 동일하게 Server Mode를 선택한다.

Server Mode: Peer to Peer (Shared Key)
Server Host or address: OpenVPN서버의 WAN  IP address 또는 도메인

 

암호화 설정

Auto generate: Uncheck

Shared key: 서버쪽에서 생성된 공유키를 복사해서 그대로 입력한다.(copy & paste)

터널 설정

IPv4 Tunnel Network: 10.0.0.0/24(Site A와 동일하게 적어준다)
IPv4 Remote Network(s): 192.168.100.0/24 (Site A의 사설망을 적어준다)

입력 후  Save 해서 종료한다. 저장 후 VPN->OpenVPN->Clients에 아래와 같이 Client가 추가가 된다.

Site to Site 연결하기

Site A의 pfSense-> Status->OpenVPN 에서 VPN서버 실행확인

Site B의 pfSense-> Status->OpenVPN 에서 VPN Client 실행확인

A와B사이트가 연결이 되면 위처럼 Status up 상태로 되며 에러가 난다면 로그등을 확인해 보도록 하자.

정상적으로 연결이 되었다면 192.168.100.0/24 네트워크와 192.168.200.0/24 네트워크와 통신이 되는 것을 확인할 수 있다.

 

pfSense를 이용한 OpenVPN 서버 구성하기

이 강좌는 OpenVPN을 이용하여 VPN을 구성한다.

VPN은 터널링을 통해서 데이터들이 암호화 되어 전송이 되므로 중간게 패킷을 가로채거나 수정하기가 어렵기 때문에

보호되어야 될 네트워크는 가급적 VPN을 이용하여 엑세스 하는 것이 조금 더 안전하다.

pfSense는 여러가지 VPN구성을 지원한다.(IPsec,L2TP,openVPN)

각각의 장단점들이 있고 구성에 따라서 속도들도 약간씩은 차이가 난다. 상황에 맞게 골라서 사용하면 된다.

나름 비교가 잘되어 있는 사이트를 참고해보도록 하자.(https://ko.vpnmentor.com/blog/vpn-protocol-comparison-pptp-vs-l2tp-vs-openvpn-vs-sstp-vs-ikev2/)

pfSense에서는 정말 간단하게 VPN 서버를 구성할 수 있다.

pfSense가 설치되어 있다고 가정하고 기본적으로 WAN,LAN으로만 구성이 되어있는 환경을 기준으로 구성을 해보도록 한다.

대부분의 경우 VPN을 구성하는 경우 일반적으로 아래처럼 두가지 정도의 형태로 구성을 한다.

  1. 다수의 클라이언트에게 특정 네트워크에  VPN 터널을 이용해서 연결하는 형태
  2. Site to Site(원격 사무소와 메인사무소등을 하나의 네트워크로 연결하는 형태)

 

일단 첫 번째 형태의 원격접속용 OpenVPN서버를 구성해도록 하겠다.

기본 네트워크 구성은 아래와 같다고 가정하고 구성해보도록 하자.

OpenVPN 서버구성하기
pfSense에서 제공해주는 OpenVPN 마법사를 이용해서 간단히 10분 정도만 투자하면 훌륭한 VPN 서버를 구성할 수 있다.

  1. OpenVPN 구성마법사 실행(VPN->OpenVPN->Wizards)
  2. 인증 구성
    (Local database 말고 windows AD,LDAP,RADIUS등을 이용해서 유저인증이 가능하다.)
  3. CA 설치(인증서버)
  4. 서버인증서 추가
  5. OpenVPN 서버 셋업
    대부분은 기본값으로 두고 필요한 정보들만 입력해주면 된다.
    가장 중요한 부분은 터널 설정인데 Tunnel NetworkLocal Network만 잘 설정해주면 된다.
    터널 네트워크는 VPN클라이언트와 VPN서버와 터널로 연결할때 사용할 네트워크 대역이다.
    클라이언트,서버 양쪽 모두 사용하지 않고 있는 사설망으로 잡아주면 된다.
    로컬 네트워크는 VPN 서버를 통해서 접속할 내부 네트워크 대역을 적어주면 된다.
    즉  pfSense 방화벽의  LAN(혹은 추가적인 사설네트워크)를 적어주면 된다.




  6. 방화벽 설정
    자동으로 방화벽룰을 추가하는 부분이며 추가해주지 않는다면 나중에 수동으로 추가해 줘야 한다.
    위의 과정을 마치면 아래와 비슷한 화면을 만나게 될 것이다.
  7. VPN사용자 추가
    pfSense web config-> System->User Manager -> 사용자 추가
    보안을 강화하기 위해서 VPN서버 접속시 SSL/TLS + 사용자ID/PASSWD를 이용해서 접속하게 하는게 좋으므로
    사용자 인증서도 반드시 생성해두도록 한다.(Certificate 체크)
    Descriptive name 에는 사용자를 구분할 수 있는 정보를 넣어주도록 하자.
  8. VPN서버 설정 변경
    서버 인증 방식을 변경해 준다. (VPN->OpenVPN)
    Server Mode를 SSL/TLS+User Auth로 설정해주도록 한다.
  9. OpenVPN export툴 설치
    인증서와 서버 접속 정보를 쉽게 내보내기를 해주는 도구를 설치하도록 한다.
    System->Package Manager-> Available Packages-> Openvpn-client-export


    정상적으로 설치가 되었다면 VPN->OpenVPN메뉴에 아래와 같이 client export 탭이 생겨난다.
  10. VPN클라이언트 내보내기
    VPN->OpenVPN-> Client Export
    각 사용자 별로  인증서와 서버 접속정보(.ovpn) 파일을  PC의 적당한 곳에
    다운로드(Standard Configurations->Archive) 한 다음 압축을 풀어두고
    OpenVPN client를  PC에 설치하고 VPN서버에 접속하면 된다.
    OpenVPN 클라이언트 설치 URL도 링크가 되어 있으니 다운로드 받아서 설치하면 된다.
    필자의 경우 MacOS를 사용중이라 Tunnelblick 과 Viscosity 를 사용 중이다.
    Windows 사용자의 경우에는 Windows installer 버전을 받아서 설치하면 된다.

VPN client를 이용해서 OpenVPN서버에 접속 후 LAN서버와 통신이 된다면 모든 설정이 마무리가 된다.
VPN서버에 접속 후 서버에서 설정한  Tunnel network 가 클라이언트쪽에 생성이 되면 정상적으로 터널링이 된 것이다.

 

 

 

 

 

Dell iDRAC alert 설정하기

다수의 서버들을 모니터링 하는 경우 snmp나 nagios,zabbix 등등의 모니터링 프로그램들을 이용하게 된다.

전문적인 모니터링 시스템을 이용하지 않고 간단히  Dell서버에서 제공해주는 iDRAC(Integrated Dell Remote Access Controllr, HP 의 ILO랑 비슷한 녀석이다.)을 이용해서 서버의 상태를 메일로 받아보도록 하자.

대부분의 최신의 Dell서버는 iDRAC Express 가 기본적으로 장착되어 있으며 Enterprise버전의 경우 Virtual Console를 제공해줘서 원격지의 서버를 집에서도 OS 설치등을 가능하게 해준다.

iDRAC Express의 경우 대부분은 NIC1  과 공유해서 사용하고 Enterprise의 경우에는 별도의 전용포트를 사용한다. 아래의 내용은 iDrac8을 기준으로 하며 iDRAC6이상부터는 비슷한 설정이다.

원격지에 서버가 있는 경우 디스크가 고장나거나 하더라도 Fault  LED를 볼 수 없어서 그냥 방치되다가

Raid가 완전히 망가지는 상황이나 하드웨어적으로 문제가 있는 경우에 유용하게 사용될 것이다.

 

iDRAC에 IP를 할당한 다음 IDRAC 관리자 페이지에 로그인 한 다음

iDRAC Settings -> Network-> Common Setting

DNS iDRAC Name 과 Static DNS Domain Name을 적어주도록 한다. 이 부분을 생략하면  나중에 나올 SMTP서버를 설정해도 메일이 발송되지 않는 경우가 있다.

그 이유는 아래 적어주는 정보를 기반으로  iDRAC 에서  메일의 From주소를 생성하게 되는데 아래가 아래 부분이 생략이 되면 From주소가 없어서 대부분의 메일서버에서는  메일 메시지를 반송을 시키던지 Drop를 시킨다.

ex)

DNS iDRAC Name: idrac-aaaa

Static DNS Domain Name: abc.com

== 보내는 E-mail Address: idrac-aaaa@abc.com

Server->Alerts

기본값은 Disabled 이며 Enabled 로 바꾼 다음 Apply해준다.

아래의 설정은 E-mail로 받을 서버의 상태들인데 information, alert, critical  의 상태에 따라서 메일 받을 부분을 선택해 주고 Apply하면 된다.

SNMP and Email Settings

snmp서버가 구성이 되어 있다면 snmp서버에 Trap을 보낼수도 있다. 일단 메일을 설정하는 과정이다.

메일 받을 주소를 적어주고 Apply를 해준다.

다음은 가장 중요한 설정이다.

로컬 네트워크에 자체 메일 서버가 있고 메일서버가 릴레이를 허용한다면  SMPT에 메일서버 IP나 FQDN/DNS Name를 적어준다.

자체적인 메일서버가 없는 경우 다른 SMTP서버를 통해서 메일을 발송하도록 설정해 준다.

아래는 몇몇 사이트의  SMTP설정 방법이다.  사이트에 따라서 사이트에 로그인해서 smtp사용을 허용해줘야 되는 경우가 있으니 확인해야 한다.

  1. Daum
    SMTP: smtp.daum.net
    Enable Authentication :Check
    Username: 본인의  ID
    Password: 비번
  2. Google
    SMTP: smtp.google.com
    Enable Authentication :Check
    Username: 본인의 ID
    Password: 비번
  3. Naver
    SMTP: smtp.naver.com
    Enable Authentication :Check
    Username: 본인의 ID
    Password: 비번

 

모든 설정이 끝났다면  Destination Email Addresses의 Test Email의 Send를 클릭하면 테스트 메일이 발송이 될 것이다.

 

Postfix를 이용한 스팸 및 바이러스 필터링 시스템 구성하기

회사에서 사용하는   MS Exchange Edge Server를 이용한 스팸 및 바이러스 필터링 시스템에 몇가지 부족한 부분과 수정이 안되는 문제 때문에 필터링 시스템을 Postfix로 변경하기 위해 작업을 해보았다.

MS제품군은 편리하기는 하지만 필자처럼 리눅스 환경에 익숙한 사람들에게는 자유도가 너무 부족하다…^^;

전체적인 구성도는 아래와 같다. 물론  DNS에서 MX레코드 설정을 변경하여  제일 먼저  Postfix필터서버가 메일을 받도록 설정해줘야 된다.

spamfilter

각각에 대한 간단한 설명은 아래와 같다.

Postfix – MTA(mail tranfer agent) 로 메일메시지를 전송하는 역할을 한다.

Amavis – 펄로 제작된 프로그램으로 외부의 스팸필터링 프로그램,백신들을 호출할 수 있도록 해준다.

ClamAV – 오픈소스 백신 프로그램으로 메일에 첨부된 바이러스를 필터링 한다.

Spamassassin – 오픈소스 스팸 필터링 프로그램으로 스팸룰과 스팸학습기능을 제공해준다.

 

간단히 설명하자면 외부로 부터 오는 모든 메일메시지는 제일 앞단에 위치하는  Postfix  server로 들어오고Postfix서버에 설치된  amavis 시스템을 통해 스팸과 바이러스를 필터링 한 이후 다시 최종적으로 실제 메일서버에 전달해주는 형태가 되겠다.  amavis는  다른 상용프로그램들도 연결하기가 아주 쉽다.

필자의 경우 우분투 서버를 기준으로 구성했다. 다른 배포판도  설치는 간단하니 그냥 환경설정 정도만 변경해 주면 된다.

Postfix설치 및 설정하기

sudo apt-get install postfix

postfix 설정하기

/etc/postfix/main.cf   및 /etc/postfix/master.cf  에서 설정을 해주면 된다.

main.cf 수정하기

myhostname = 스팸필터링호스트 네임을 적어준다.(ex. spamgw.abc.com)
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = 메일을 받을 도메인을 적어준다. (ex. abc.com mail.abc.com localhost)
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
smtpd_recipient_restrictions = permit_mynetworks reject_unauth_destination

# 메일을 전송할 호스트 설정
transport_maps = hash:/etc/postfix/transport 
# 로컬 수신설정
local_recipient_maps =
# 필터링 설정
content_filter = smtp-amavis:[127.0.0.1]:10024 

아래 3라인 transport_maps,local_recipient_maps,content_filter부분은 필터링 시스템에서 가장 중요한 부분이다.

transport_maps설정

transport_maps는 /etc/postfix/transport  파일에 설정된 메일서버로 메일을 전송하는 설정이다. 따라서 스팸 필터를 모두 마치고 나서 실제 최종 메일서버로 메일을 전송하도록 설정해 줘야 한다.

아래 예제를 참고해서 /etc/postfix/transport파일을 반드시 작성하도록 한다. 192.168.30.85는 Exchange server의 IP address 이다.

mydomain.com smtp:[192.168.30.85]
abc.com      smtp:[192.168.30.20]

각각 메일 도메인에 대해서 라우팅을 설정해 주는 것이다.

 

로컬메일 recipient 설정

기본적으로 postfix는 계정이 존재하지 않은 메일메시지에 대해서는 모두 반송을 하게 되어있다. 스팸 필터링 서버에는 리눅스 계정이나 가상메일 계정이 존재할 필요가 없고 단순히 필터링만 하기 때문에 들어오는 모든 메일 메시지를 허용해줘야 하며 아래의 설정이 바로 그것이다. 따라서 아래의 설정이 없으면 모든 메일은 반송이 된다.

local_recipient_maps =

 

필터링 설정

content_filter = smtp-amavis:[127.0.0.1]:10024

필터링 엔진에 대한 설정이며 amavis에 메시지를 전달해주는 설정이다.

/etc/postfix/master.cf에 추가해준다. 아래는 smtp를 이용해서 메시지를 전달해주며  lmtp를 이용해도 된다.

smtp를 이용하는 방법

smtp-amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20

lmtp를 이용하는 방법

smtp-amavis unix - - n - 2 lmtp
-o disable_dns_lookups=yes
-o lmtp_send_xforward_command=yes
-o lmtp_data_done_timeout=1200

postfix  설정

/etc/postfix/master.cf 에 아래와 같이 추가해 준다.

127.0.0.1:10025 inet    n       -       -       -       -       smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_delay_reject=no
        -o smtpd_client_restrictions=permit_mynetworks,reject
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o smtpd_data_restrictions=reject_unauth_pipelining
        -o smtpd_end_of_data_restrictions=
        -o mynetworks=127.0.0.0/8
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
        -o smtpd_client_connection_count_limit=0
        -o smtpd_client_connection_rate_limit=0
        -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

 

위의 설정까지 마무리하면 기본적인 스팸 필터링 구조는 만들어둔 것이다.

이제 실제 필터링을 하는 amavis 와 clamav,spamassassin  을 설치해 보자.

apt-get install amavisd-new spamassassin clamav-daemon
sudo adduser clamav amavis 
sudo adduser amavis clamav

 

설치가 되었다면 amavis  설정을 해준다.

/etc/amavis/conf.d/15-content_filter_mode 파일을 열어서  아래와 같이 주석을 제거해주자.

@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

 

amavis 데몬 시작

/etc/init.d/amavis start

Postfix 재시작

/etc/init.d/postfix restart

 

최종 메일 서버의 설정

메일이 최종적으로 저장이 되는 메일서버는 Postfix메일서버로 부터의 연결을 허용해줘야 한다.

익스체인지 서버의 경우 수신커넥터 설정을 해주면 되고 qmail,postfix,sendmail서버의 경우 postfix필터서버를 relay를 허용해주면 된다.

잘 구성이 되었다면 메일 로그에 아래와 같이 나오게 될 것이다.

Nov 16 12:40:58 host1 amavis[21780]: (21780-07) Passed CLEAN {RelayedInbound}, 
[xxx.xxx.xxx.xxx]:41666 [xxx.xxx.xxx.xxx] <Andy.Kim@abc.com> -> <stone@abc.net>, 
Queue-ID: 6BEB2340011, Message-ID: <83B36BA2-D05C-43A9-A440-45BCE51EE141@raon-tech.com>, 
mail_id: U_w6o4Gmz7Mz, Hits: 1.277, size: 3983, queued_as: 7EBDD340016, 2654 ms

나머지 기타 세세한 부분들은 각자 테스트 해보기 바란다.

스팸어세신의 학습 기능을 이용한다면 저장된 스팸메일을 학습시켜서 거의 대부분의 스팸메일을 자동으로 걸러낼 수 도 있다. 그리고 clamav 뿐만 아니라 기타 상용 백신엔진들도 사용하도록 amavis 에서 제공하고 있으니 참고해 보기 바란다.

 

 

 

WDS를 활용한 Linux 시스템 네트워크 설치-Kickstart

기본적으로 레드햇 리눅스 계열은  kickstart라는 네트워크 설치 프로세서를 제공한다.

대부분의 경우  tftp서버 및 nfs,http,dhcp서버등을 리눅스로 구성한 다음 네트워크 설치를 구성하지만 필자의 경우 windows 시스템과 리눅스 시스템이 혼용이 되어 있어서 간략한 시스템을 구성하기 위해 통합 작업을 하였다.  아래 포스트에 WDS와 syslinux를 이용한 네트워크 설치 서버 구성편을 읽어보고 구성이 되어 있다고 가정한다.

http://www.nuxinfo.net/wdssyslinux%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%B9%98%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0/

전체적인 작업 순서

  1. WDS에 리눅스 부팅 이미지를 적당한 곳에 위치한다. 리눅스 부팅 이미지는 설치CD/images/pxeboot/ 에  커널(vmlinux) 과 초기화램디스크 이미지(initrd.img)  두개의 파일을 이용해서 네트워크 부팅을 시작
  2. 자동설치를 위해서 kickstart  설정파일(ex. ks.cfg) 파일을 생성하고 적당한 위치에 둔다. ks파일은 http,ftp,nfs등을 이용해서 접근하도록 구성하면 된다.
    ex)  http://example.com/ks/rhel6-32bit.ks.cfg ,ftp://example.com/ks/rhel6-32bit.ks.cfg,nfs://nfsserver/ks/ks.cfg
  3. 네트워크 부팅 후 initrd 에 kickstart 설치 값을 전달한다.(WDS설치디렉토리(RemoteInstall)\Boot\x86\pxelinux.cfg\default 파일에서 설정해 준다.)
    예제)

    LABEL CentOS 6.8(64bit)
    MENU LABEL CentOS 6.8 64bit
    KERNEL /Linux/CentOS/6.8/x86_64/vmlinuz
    APPEND initrd=/Linux/CentOS/6.8/x86_64/initrd.img ks=ftp://192.168.30.100/ks/cent6-ks.cfg

     

 

Kickstart환경설정 파일 생성

kickstart설치를 위한 환경설정 파일은 미리 만들어진 파일을 참고하여 만들어도 되고 가장 편한 방법은 레드햇 계열의 시스템을 설치하면 자동으로 생성되는 anaconda-ks.cfg(/root 디렉토리에 자동생성된다.) 를 이용하는 방법이 있다.

아래는 Centos 6 ks.cfg 예제이다.  Centos 7버전은 형식이 조금 달라졌으니 확인하기 바란다.

install #설치할 것인지 업그레이드 할 것인지 선택
text # text모드로 설치
url --url http://ftp.daumkakao.com/centos/6.8/os/x86_64 #미러서버 경로(내부에 구성했다면 내부서버경로를 잡아주자)
lang en_US.UTF-8 #설치 언어
keyboard us #키보드 설정
network --onboot no --device eth0 --bootproto dhcp --noipv6 #네트워크 설정
rootpw --iscrypted $6$bsimcTMIypuVEJKu$yeYkKkqQUSW8nwhx4HbCL8x9V6KqBC9.nMVMlTLwfO.# root사용자 비번
firewall --service=ssh #방화벽 설정
authconfig --enableshadow --passalgo=sha512 # 인증 및 암호화 알고리즘
selinux --disabled # selinux설정
timezone --utc Asia/Seoul # 시간설정
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" # 부트로더 설정

clearpart --all --drives=sda #sda의 기존 파티션을 모두 삭제한다.주의할 것!

part /boot --fstype=ext4 --size=500
part pv.008002 --grow --size=1

volgroup vg_lvs --pesize=4096 pv.008002
logvol / --fstype=ext4 --name=lv_root --vgname=vg_lvs --grow --size=1024 --maxsize=51200
logvol swap --name=lv_swap --vgname=vg_lvs --grow --size=1638 --maxsize=1638

%packages --nobase #설치할 패키지
@core #패키지 및 패키지 그룹을 적어준다.
%end

참고)  암호화된 rootpw 생성방법

anaconda로 생성된 ks 파일에 이미 설치할때 입력한 root패스워드를 이용하지 않고 새롭게 입력하고 한다면 아래의 방법을 사용하도록 하자. 생성된 암호를  rootpw 라인에 넣어주면 된다.

  •  암호화 알고리즘을  md5 로 설정한 경우(authconfig --enableshadow --enablemd5)

    openssl passwd -1 "사용할패스워드"
    
    grub-crypt --md5
  • 암호화 알고리즘을 sha512 로 사용하는 경우(authconfig –enableshadow –passalgo=sha512)
    grub-crypt --sha-512

 

 

 

WDS를 활용한 windows 시스템 네트워크 설치-활용편2

활용편1 에서는 OS설치 이미지를 그대로 사용을 하고 unattend.xml을 이용해서 설치 자동화를 했는데 이번에는 sysprep를 이용해서 설치 이미지를 수정해서 사용해 보도록 하자.

작업 순서는 아래와 같다.

  1. 레퍼런스용 PC에 필수적으로 사용되는 프로그램들을 모두 설치한다.(office나 기타 등등)
  2. 레퍼런스용  PC를 sysprep를 이용해서 봉인 작업을 한다.
  3. 봉인된 PC를 imagex나 WDS의 capture 기능을 이용해서 WIM을 생성한다.
  4. 생성된 WIM을 WDS에 탑재하여 배포한다.

 

준비된 작업 PC에 필요한 회사에서 공통적으로 사용하는 프로그램들을 설치했다고 가정하고 sysprep를 이용해서 배포가능한 상태로 만드는 작업을 해보도록 하자. Windows 7 부터는 기본적으로 설치가 되어 있다.

가급적 레퍼런스 PC는 외장디스크나 별도의 디스크나 파티션을 준비해주시기 바랍니다.왜냐하면  이미징 작업을 하고 저장할 공간이 필요하기 때문이다. 네트워크상에 공유파일 서버가 있다면 그곳에 저장해도 된다.

c:\windows\system32\sysprep

sysprep 작업을 하면  하드웨어 정보나 SID같은 고유값을 제거한 상태로 만들어주기때문에 이렇게 해서 생성된 이미지는 어떠한 시스템에도 설치가 가능하게 된다.

일반화를 선택하고 시스템을 종료하도록 하자.(재부팅을 선택해도 되지만 안전하게 일단 종료해 두자)

* 작업전에 휴지통도 비우고 도메인에 조인되어 있다면 도메인에서 제거하도록 하자.

sysprep

확인을 누르면 일반화 작업이 진행이 되고 끝나면 종료가 된다.

이제 WIM이미지를 생성하는 작업이다.

보통 두가지 방식으로 WIM 이미지를 생성하는데 한 가지는 winpe+imagex(or gimagex 또는 ghost나 trueimage같은 이미징툴)를 이용해서 WIM을 생성하거나 다른 한가지는  WDS에 있는 캡쳐기능을 이용해서 이미지를 생성하는 방법이다. Windows 2008 버전부터는 캡쳐 이미지를 생성 기능이 추가 되어어서 복잡하게  winpe에 imagex 등을 이용해서 WIM 을 생성하지 않아도 된다.

WDS에서 캡쳐 이미지 생성하기

캡쳐 이미지 만들기를 선택하고 만들어진 캡쳐 이미지를  WDS에 추가한다.

wds_capture

wds_capture2

WDS에서 해야될 작업은  끝났다.

sysprep작업을 해서 종료된 PC를  PXE부팅을 하도록 하자.

주의) 디스크로 진입하면 다시 oobe가 진행이 되므로  sysprep 작업을 해줘야 한다.

PXE부팅하면 만들어둔 capture 를 선택하고 부팅한다.

wds_captureboot

wds_sysprep1

캡쳐할 볼륨을 선택하고 이미지 이름과 설명을 추가한다.

wds_sysprep2

WIM을 저장할 위치를 선택하고 진행한다. 완료가 되면 자동으로 재부팅이 된다.

wds_sysprep3

만들어진 custom  WIM을  WDS 서버의 설치 이미지에 추가한 다음  클라이언트를  PXE부팅하면

추가된 custom WIM목록이 보이고 선택하면 필요한 소프트웨어들이 미리 설치된 OS를 빠르게 설치할 수 있다.

WIM방식의 이미징 작업의 장점은 파일 단위로 이미지를 생성하기 때문에 파티션 레이아웃이 달라도 아무문제없이 설치가 가능하다는 것이다.

이렇게 한 번 생성해둔 이미지를 WDS서버에 올려두면 OS재설치 작업시간을 아주 많이 줄일 수 있게된다. 또한  WDS의 멀티캐스트 전송을 이용하면 다수의 클라이언트에 한꺼번에 OS설치가 가능하다.

WDS를 활용한 windows 시스템 네트워크 설치-활용편

이제 WDS가 구성이 되었으니 실제로 활용하는 과정을 살펴보도록 하자.

WDS는 기본적으로 클라이언트들이 운영체제들을 설치할 때 무인설치를 지원해준다.

따라서 사용자들은 네트워크 부팅 손쉽게 OS를 설치할 수 있게된다.

실제 업무환경에서 사용하는 방법은 보통 두가지 방법으로 사용을 한다.

  1. WDS 에 unattend.xml을 생성해서 놓아두고 무인설치를 하는 방법
  2. 필요한 프로그램이나 전사적으로 사용하는 환경을 미리 구성한 다음  sysprep로 작업한 후 이미지를 생성하고 생성된 이미지를 WDS를 통해서 배포하는 방법

첫번째의 경우에는 보통 OS만 기본적으로 설치하는 경우에 많이 사용하는 편이고 두번째의 방법이 보통 회사에서 사용하는 방법일 것이다. 기본적으로 설치할 응용프로그램들을 미리 포함하는 이미지를 생성해서 표준화 하면 시스템 관리자의 입장에서는  업무량을 꽤 많이 줄일 수 있을것이다.

더이상 회사안에서 OS설치를 위해서 CD를 들고다니거나  iodd 같은것을 들고 다니지는 말자.

 

WDS를 이용한 OS무인설치

이 과정은 OS설치 시 사용자의 입력을 최소화 하거나 전체 무인 설치하고자 하는 경우에 사용하면 된다.

필자의 경우 Windows 7 환경을 기준으로 작업하며 각자의 환경에 맞는 프로그램들을 사용하기 바란다.

필요한 것들

  • windows automated installation kit(이하 WAIK, 각 OS버전별로 다르니 사용할 OS에 따라서 다운로드 받도록 한다)
  • OS설치용  CD 또는 iso 파일
  • 작업용 PC(WAIK를 설치하고 unattend.xml를 생성하기 위한  PC,가상머신이어도 상관없다)

 

WAIK설치

작업용  PC 에  https://www.microsoft.com/ko-kr/download/details.aspx?id=5753 에서 WAIK를 다운로드 받아서 설치한다.
WAIK 에는 winpe 환경을 쉽게 꾸밀 수 있도록 해주기 때문에 나중에 시스템 복구 환경같은것을 구현할 때도 유용하게 사용이 된다.

 

무인설치파일(unattend.xml)생성하기

WAIK가 설치후  Windows 시스템 이미지 관리자를 실행한다.

waik

Windows 이미지 또는 카탈로그 파일선택에 마우스 우측클릭하여 install.wim(windows 설치CD에 있는)을 추가해 준다.

참고) wim파일을 추가하게 되면 카탈로그 파일을 만들겠냐고 물어보는데 카탈로그 파일이 생성이 잘 안된다면 그냥 CD에 있는  clg파일을 추가해주면 된다. 어차피 이미지수정이 필요한것이 아니고 응답파일을 생성하는게 목적이니까..

wsim이미지를 추가했으면 새응답파일을 생성하도록 한다.

answerfile

새 응답파일에 이제 필요한 컴포넌트들을 추가해서 무인 설치가 가능하도록 해보자. 컴포넌트를 선택하고 마우스 우측을 클릭하면 원하는 위치에 가져다 놓을 수 있고  본인이 원하는 값으로 미리 값들을 지정할 수 있다.

실제로 컴포넌트들은 너무 많고 필자도 모두 테스트 해본적이 없어서 전체적인 설명은 어렵다. 컴포넌트 선택후 F1  을 입력하면 메뉴얼이 나오니 참고해서 셋업해보도록 하자.

기본적으로 디스크 파티션닝 및 사용자추가,회사명등등 공통적으로 사용하는 것들을 추가해주면 된다.

아래예제를 참고해 보도록 하자.

component

 

이렇게 만들어진 파일(unattend.xml)을  WDS 설치 디렉토리(c:\RemoteInstall\WdsClientUnattend) 에 복사한 다음 WDS 설정에서 무인설치를 설정해준다.

set_unattend

 

이제 모든 준비는 끝났고 OS를 설치할 PC를 PXE부팅을 하고 F12를 눌러서 진행하면 사용자 입력없이 OS를 설치할 수 있다. 심지어는 AD에 Join하는 것도 자동화 시킬 수 있으나 개인적으로는  AD  Join 과정은 메뉴얼로 진행하는 편이다. 필자의 경우에는 사내 정책으로 컴퓨터 이름도 표준화 시키고 있어서 자동생성된 컴퓨터 이름을 사용하지 않기 때문이다.

응답파일을 잘 만들어 두면 OS설치 작업이 한결 수월해지게 된다.

완벽하게 자동화 시키기 위해서는 꽤 많은 테스트 과정을 거쳐야 원하는 구성을 할 수 있을 것이다.

 

 

WDS를 활용한 windows 시스템 네트워크 설치-기본편

windows 2003에 있던 RIS가 windows 2008 이후부터  windows deployment services(이하  WDS)로 이름이 바뀌면서 좀더 많은 기능과 편리함을 제공해 준다. 또한 windows 7부터 지원되는  WIM(windows imaging)파일형태의 설치 환경으로 사용자는 좀더 편하게 설치환경을 원하는대로 수정할 수 있게 되었다.

PC 및 Laptop,Server등이 다수 필요하고 각각의 장치들의 제조사들이 제각각인 경우 관리자의 입장에서 설치지원하는 업무는 생각보다 많은 시간과 불편함을 초래한다. 이런 경우 WDS를 활용하면 시간과 수고를 많이 줄일 수 있을 것이다.

 

 

WDS설치 및 구성

필자의 경우 windows 2012R2 기준으로 설명하도록 하겠다.  회사에 구성된  시스템은  windows 2008 R2로 구성이 되어 있으며 공용시스템,각 부서별 시스템용을 분리하고 OS들도 분리해서 네트워크 설치가 가능하도록 구성했다.

*기본적으로 사용하는 네트워크에  DHCP서버가 구성이 되어 있다고 가정하겠다. DHCP서버는 Windows 시스템이건 Linux 시스템 이건 상관없다.  PXE클라이언트가 IP를 할당 받아서  WDS와 통신이 가능하도록 해주기만 하면 된다.

역할 및 기능추가

특별한 경우가 아니면 그냥 다음으로 진행하면서 설치를 완료하면 된다.

wds_install

wds_install2

wds_install3

wds_install4

wds_install5

WDS기본 구성하기

역할및 기능을 통해서 WDS를 설치했으니 실제로 서버를 구성해본다. 서버 구성을 선택하고 진행한다.

wds_install6

AD와 통합할것인지 단독으로 운영할 것인지 여부인데 필자의 경우 AD를 구성해서 사용하고 있다.

AD와 통합된 환경에서는 PXE클라이언트들을 네트워크 설치를 통해  AD에 합류하는 것 까지도 가능하게 된다.  PC가 10대이상 되는 환경이라면 AD를 구성해서 운영하는것이 좋다는게 필자의 생각이다.

wds_install7

 

부팅및 설치 이미지들을 저장할 디렉토리를 지정하는 옵션이다. 가급적 시스템이 설치된 드라이브가 아닌 별도의 드라이브를 만들어 두는것이 좋다. C드라이브만 존재한다면 그냥 C 드라이브에 설치폴더를 구성하도록 하자.

wds_install8

 

PXE서버의 초기값으로  모든 클라이언트에 대해서 응답하도록 구성한다.

wds_install9

 

구성이 마무리 되면 아래와 같은 화면을 볼 수 있을 것이다. 주로 설치 이미지,부팅 이미지 폴더를 많이 사용하게 될 것이며 고급운영을 원한다면 드라이버폴더를 이용해서 설치 과정중에 자동으로 드라이버들을 설치할 수 있도록 구성이 가능하다.

wds_install10

 

기본적인 설치 환경 구성하기

실제로 부팅 이미지와 설치 이미지를 WDS에 추가하여 클라이언트들이 네트워크 설치가 가능하도록 구성해보자.

windows 7이후 OS의 설치CD의 Sources폴더에 각각  boot.wim(부팅 이미지), install.wim(설치 이미지) 가 존재하며 이 파일을 이용해서 운영체제를 설치하게 된다.

부팅 이미지 추가

부팅이미지는  windows pe 와 windows 설치환경을 지원해주는 이미지다.

addbootimage

 

wds_installimage1

Windows 7 설치CD의sources디렉토리에 부팅 이미지와 설치 이미지가 있다.

wds_bootimage

설치 이미지 추가

위의 부팅 이미지 추가하는 과정과 동일하며 install.wim 을 선택해서 추가하도록 한다.

 

위의 과정까지 진행했으면 네트워크를 통한 windows 시스템 설치를 위한 모든 준비는 끝났다.

노트북이나 PC의 bios에 들어가서 PXE를 활성화 시킨 다음 부팅순서를 PXE(network)를 우선순위로 한 다음 전원을 켜면 DHCP서버에서 IP를 할당받는 화면이 나오고  F12을 입력하면  WDS로 진입하게 된다. 그 다음은 보편적인 windows설치하는 과정과 동일하다.

bios_networkboot

pxeboot

주의)
F12을 누르지 않으면 PXE부팅을 하지 않고 진행이 되므로  F12를 눌러서 진행하도록 한다.  WDS기본값이며 나중에 WDS설정에서 변경이 가능하다.

WDS,syslinux를 이용한 네트워크 설치서버 구축하기

언제나 그렇듯이 경어는 생략합니다. 글에 대한 의견이나 반론은 stone@nuxinfo.net으로 메일 주시면 됩니다. 아니면 코맨트 남겨주시면 제가 확인하도록 하겠습니다.

시스템 관리자의 업무 중 에서 꽤 많은 비중을 차지하는 시스템 설치 작업을  좀더 편하고 쉽게 하기 위한 방법에 대해서 기술해보고자 한다.

네트워크를 통한 OS설치 작업은 그 역사가 꽤 깊다. 솔라리스의 jumpstart,리눅스의 kickstart,윈도우즈의  RIS(현재는 WDS로 변경됨) 등등이 그 종류이다.

현재 출시되는 대부분의 PC,Laptop,Server등은 모두 네트워크 부팅을 지원하며 심지어는 가상화 시스템도 네트워크 부팅을 지원하므로 통합설치서버를 구성해두면 대부분의 시스템을 CD나 플로피등을 이용하지 않고도 손쉽고 빠르게 OS설치 및 펌웨어 업그레이드 등을 진행할 수 있게 된다.

아래는 구성된 설치 서버의 예제화면이다.  WDS와 syslinux를 조합해서 Windows 시스템 설치 및 리눅스 설치, 각종 펌웨어 업그레이드를 위한 DOS부팅등등을 지원하도록 해두었다.

pxebootmenu

이 강좌는 기본적으로  Windows Deployment Service(이하 WDS)를 구성해본 경험이 있고 여러 운영체제가 운영되는 환경에 초점을 맞춰  설명을 진행할 것이다.

구성에 필요한 준비물

  1. WDS
  2. syslinux(http://www.syslinux.org 에서 최신버전으로 다운로드 받는다)
  3. 설치가 필요한 운영체제들의 ISO파일이나 기타 이미지파일
  4. FTP Server 또는 HTTP server

기본 작업

기존에 WDS가 설치되어 있는 상태에서 아래와 같이 작업을 진행하도록 하자.

먼저 다운로드(https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.zip) 받은 syslinux을 적당한곳에 압축을 해제하고 필요한 파일들을 WDS설치 디렉토리(보통은 c:\RemoteInstall 이다)에 복사한다.

  • syslinux-6.03\core\pxelinux.0 파일을 RemoteInstall\Boot\x86 폴더로 복사
  • syslinux-6.03\bios\com32\menu\menu.c32 파일을 RemoteInstall\Boot\x86 폴더로 복사
  • syslinux-6.03\bios\com32\libutil\libutil.c32 파일을 RemoteInstall\Boot\x86 폴더로 복사
  • syslinux-6.03\bios\com32\elflink\ldlinux\ldlinux.c32 파일을 RemoteInstall\Boot\x86 폴더로 복사
  • syslinux-6.03\bios\memdisk\memdisk 파일을 RemoteInstall\Boot\x86 폴더로 복사
  • RemoteInstall\Boot\x86\pxeboot.n12 파일을 RemoteInstall\Boot\x86\pxeboot.0  으로 복사
  • RemoteInstall\Boot\x86\abortpxe.com 파일을 RemoteInstall\Boot\x86\abortpxe.0  으로 복사

위의 기본 작업이 끝나면 이제 pxeboot 메뉴 작업을 하도록 한다. 이 파일이 첫째장에서 보여준 메뉴 항목을 구성하는 파일이다.

  1. RemoteInstall\Boot\x86\pxelinux.cfg  폴더 생성
  2. 생성된 폴더(pxelinux.cfg)에   메모장이나 기타 유틸로   default 파일 생성

default파일의 sample예제이니 참고 하기 바란다. pxeboot.0  을 호출하면 기존의  WDS로 부팅되며 리눅스는 미리 구성된  ks파일을 호출해서 자동으로 설치를 진행한다. 또한 iso이미지를 직접 로딩해서 부팅하도록  memdisk를 사용했다.

필자의 경우 RemoteInstall\Boot\x86\Linux,ISO 폴더를 구성하고 각각의 버전에 맞는 커널과 램디스크 이미지를 배치했다.

kickstart파일을 생성하는 방법은 직접 찾아보도록 하자. 래드햇 계열이면 모두 적용가능하다. centos 7은 centos 6 버전과  ks파일 포맷이 조금 다르니 주의하도록 하자.

# Default boot option to use
DEFAULT menu.c32
TIMEOUT 50
# Prompt user for selection
PROMPT 0
# Menu Configuration
MENU WIDTH 80
MENU MARGIN 10
MENU PASSWORDMARGIN 3
MENU ROWS 12
MENU TABMSGROW 18
MENU CMDLINEROW 18
MENU ENDROW 24
MENU PASSWORDROW 11
MENU TIMEOUTROW 20
MENU TITLE PXE Boot Menu

# Menus

# WDS
LABEL WDS
MENU LABEL Windows Deployment Server
KERNEL pxeboot.0

LABEL CentOS 6.8(64bit)
MENU LABEL CentOS 6.8 64bit
KERNEL /Linux/CentOS/6.8/x86_64/vmlinuz
APPEND initrd=/Linux/CentOS/6.8/x86_64/initrd.img ks=ftp://192.168.30.100/ks/cent6-ks.cfg

LABEL CentOS 6.8(32bit)
MENU LABEL CentOS 6.8 32bit
KERNEL /Linux/CentOS/6.8/x86/vmlinuz
APPEND initrd=/Linux/CentOS/6.8/x86/initrd.img


LABEL AcronisTrueImage
MENU LABEL AcronisBootableMedia
KERNEL memdisk
INITRD iso/AcronisBootableMedia.iso
APPEND iso raw

LABEL ESXi6
MENU LABEL ESXi6.0 Installer
KERNEL memdisk
INITRD iso/VMware-VMvisor-Installer-6.0.0.update02-3620759.x86_64.iso
APPEND iso raw

LABEL MSDOS
MENU LABEL MSDOS
KERNEL memdisk
INITRD iso/dos.iso
APPEND iso raw

# Exit
LABEL Exit
MENU LABEL Exit
KERNEL abortpxe.0

이제 모든 준비는 끝났고  WDS가 pxelinux.0을 기본적으로 로딩하도록 설정을 변경한다.

결국은 WDS가 사용하는 pxeboot를 syslinux의  pxelinux로 교체하여 구성하는 방법인 것이다.

기존의 WDS는 클라이언트—pxeboot—WDS 였다면 위의 구성은 클라이언트—pxelinux—pxeboot–WDS구성인 셈이다.

WDS서버의 cmd창을 열어서 아래와 같이 입력한다.

  • wdsutil /set-server /bootprogram:boot\x86\pxelinux.0 /Architecture:x86 
  • wdsutil /set-server /bootprogram:boot\x86\pxelinux.0 /Architecture:x64
  • wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.0 /Architecture:x86 
  • wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.0 /Architecture:x64

 

모든 설정이 끝났다면 설치를 원하는 서버나 PC의 bios에서 pxe부팅을 활성화 시킨 후 부팅하면 아래와 같은 화면이 나오면 정상적으로 구성한 것이다. default파일에 필요한 구성을 추가하면 된다. DOS환경이 기본인 펌웨어 업데이트 작업도 ISO파일을 수정해서 올려놓으면 네트워크 부팅을 통해서 펌웨어를 업데이트 할 수도 있을 것이다.

pxebootmenu

 

ZFS 기반의 NAS/SAN 스토리지 만들기

부제: 최소 금액으로 만들어보는 통합 스토리지 시스템과 활용법

 작성자: 김경민(stone@nuxinfo.net)
1. 부득이 하게 경어는 생략합니다.
2. 마음대로 퍼가셔도 되며 수정해서 작성자 이름을 변경 후 재 배포해도 상관 없습니다. :-)
3. 내용 중 명확히 잘못된 부분이 있으면 언제라도 수정하셔도 됩니다.
4. 내용에 대한 반론이 있다면 메일 또는 공개 게시판에 반론 제기하시면 됩니다.
5. 부족한 부분이나 추가했으면 하는 부분이 있다면 메일로 요청하시면 됩니다만 언제 추가할 지 장담은 못합니다.

ZFS(Zettabyte File System)란?

 

* ZFS 파일 시스템은 기존의 유닉스 파일시스템을 대체하기 위하여 2005년 SOLARIS10에서 처음 소개된 파일시스템으로
파일시스템들 가운데 최초로 128bit파일 시스템을 적용하여 거의 무한대의 용량을 제공하며 파일시스템 자체에서 볼륨 매니저 기능을 포함하여
시스템 내에 있는 하드 디스크들을 구성하거나 스토리지 풀로 통합하여 사용하는 것이 특징이다.[http]wikipedia

2.1 ZFS 기본컨셉과 장점

물론 장단점이 있긴 하지만 필자가 생각했을 때 ZFS가 갖는 좋은 점 몇 가지를 소개하고자 한다.
극강의 파일시스템이라고 불리는 ZFS의 유연성과 편리함을 잘 활용했으면 봤으면 한다.
위의 그림을 다시 풀어보자면 아래와 같은 차이점이 있다는 것을 알 수 있다.
1. 고전적인 Unix,Linux,FreeBSD,etc 에서의 파일 시스템 사용 절차
Device인식(/dev/sda)=> partition => mkfs.ext3 /dev/sda1(format) => mount
또는
format =>partition => newfs /dev/rdsk/c0t0d1s5 => mount /dev/dsk/c0t0d1s1 /mnt
2. LVM 기반의 파일시스템 사용 절차
Device인식(/dev/sda) => PV생성 => VG(volume group)생성 => LV(logical volume)생성 =>mkfs(format) => mount
3. ZFS 사용 절차
zpool생성 => zfs 생성
정말 간단하지 않은가? :-)
ZFS는 고전적인 파일시스템의 개념과 LVM같은 볼륨 매니저가 결합된 형태이며 별도의 파일시스템 생성과 Mount과정이 필요가 없습니다.
물론 대부분의 경우 /storagepool/dataset 형태로 스토리지 풀 하위 디렉토리로 마운트가 되나
필요에 따라 원하는 위치로 마운트 시켜서 사용해도 된다.
  • 간단한 관리 명령어

위의 내용과 다소 중복이 되지만 ZFS의 경우에는 zpool,zfs명령 2가지로 모든 파일시스템에 관한 컨트롤을 다하게 되어 여러 명령어들이 기억하고 배울 필요가 없어진다.
또한 fatab,vfstab 같은 파티션 설정 파일자체도 필요가 없다.

– LVM case –
1. pvcreate /dev/sda /dev/sdb
2. vgcreate VG01 /dev/sda /dev/sdb
3. lvcreate -n lv-home -L 50G VG01(VG01 볼륨 그룹에 50G의 logical volume생성)
4. mkfs.ext3 /dev/VG01/lv-home
5. mount /dev/VG01/lv-home /home 또는 mount /dev/mapper/VG01-lv-home /home

– ZFS case –

1. zpool create STORAGEPOOL /dev/sda /dev/sdb
2. zfs create STORAGEPOOL/home
  • 128bit 파일 시스템으로 거의 무제한 용량의 파일시스템을 활용할 수 있다.

zpool max size: 256zettabytes
참고로 래드햇 리눅스 기준으로 리눅스에서는 약 16T~500T(xfs사용 시)용량을 지원한다.

  • Software Raid system 지원

H/W raid시스템과 비슷하게 mirror(raid1),raid-z(raid5),raid-z2(raid6)등을 구현 가능 하도록 되어있어 값비싼(?) H/W RAID system 을 대체할 수 있다.
혹자는 성능의 문제를 제기할지도 모르겠지만 이 글의 의도는 성능에 촛점을 맞추기보다는 다양한 요구에 대처할수 있는 다기능 스토리지 구성에 목적이 있음을 인지해주기를 바란다.
각각의 장 단점이 있으므로 이 부분은 엔지니어들의 선택에 달려있다.

  • 빠른 snapshot 과 rollback,clone
    zfs 의 유용한 기능중의 하나인 snapshot,clone,rollback을 이용하여 관리자가 원하는 시점의 데이터에 쉽게 엑세스 할 수 있다. 실제 사용하는 예제는 추후 스토리지 활용편에서 좀 더 다루겠지만 간단한게 사용하는 예제를 소개해 보도록 하겠다.
1. zfs snapshot storagepool/data1@sunday (snapshot생성)
2. rm -fr /storagepool/data1/testfile
3. zfs rollback storagepool/data1@sunday (rollback)

위의 과정처럼 snapshot 을 생성해두고 뭔가 문제가 발생했을 때 snapshot을 생성한 시점으로 바로 데이터를 복구할 수 있다.
windows의 VSS(volume shadow copy)와 유사하지만 virtual devices(zvol)를 지원하고
생성된 snapshot을 복제 가능하다는 점에서는 MS VSS보다는 유연하다.

  • 데이터 용량 및 관리의 편의성 제공

zfs의 경우 스토리지풀에 생성된 데이터를 각각의 zfs(or zvol)들이 모두 공유하기 때문에 스토리지풀의 용량만 잘 관리해주면 disk full로 인한 시스템 장애에서 벗어날 수 있다.
참고로 각각의 zvol,dataset(zfs)의 용량을 제한(quota) 및 예약(특정 용량 만큼은 보장하도록) 지정할 수 있다.
아래의 고전적인 파일시스템에서의 용량 증설 과정을 살펴보자.
1. 새 디스크 추가=>파티션 생성 및 파일시스템 생성=>mount=>기존데이터 복제=>fstab or vfstab수정
또는 LVM의 경우
2. 새 디스크 추가 => PV 생성=> VG확장=> LV확장 => 파일시스템 확장(resize2fs,xfs_grow,etc)=>fstab 수정

참고)
ext3의 경우 online resize가 안되므로 반드시 umount하고 resizing을 진행해야 한다.
xfs의 경우 online resize가 가능하므로 동적으로 용량 변경이 필요하고 무정지 시스템이 필요하다면
리눅스의 경우 필자는 XFS를 사용하기를 권장한다.

아래의 예제는 zfs 에서 스토리지풀을 확장하는 과정이다.

zpool add storagepool c2t1d0
  • 파일시스템의 기본 공유 기능

zfs는 기본적으로 nfs,smb(cifs) 등을 제공하여 별도의 설정이 없이도 쉽게 데이터를 공유할 수 있다.
물론 접근 제어(ACLs)의 설정등은 windows시스템보다는 다소 복잡한 면이 있지만
한번 잘 설정해두면 큰 문제없이 사용이 가능할 것이다.

  • 아키텍처와 상관없는 데이터 마이그레이션

스토리지 시스템의 H/W raid 컨트롤러가 고장이 났을 경우 동일 모델의 컨트롤러가 필요한 반면
zfs의 경우 zpool export/import를 이용하면 스토리지풀을 OS와는 상관없이 마이그레이션이 가능하다.
FreeBSD에서 만든 zpool을 Linux,opensolaris,solaris등에서도 별다른 설정 없이
가져와서 사용이 가능하다는 이야기가 된다. 물론 반대의 경우도 당연히 가능하다.