09. NTFS 마운트 하기 또는 cp를 이용한 데이터 백업 [NAS 구축기][ubuntu 10.4]

얼렁뚱땅설명서 2012. 3. 1. 22:57

NAS에 대한 고민은 그동안 날려먹은 수 많은 하드디스크의 데이터 때문이었다.
수 많은 밤을 꼴딱새고, 멍한 정신 상태에서 파티션을 날려먹거나 포맷을 한다거나,
삭제 버튼을 눌러버리는 일은 참으로 흔하고 소소한 일들이었다. 시간도 얼마 걸리지 않는다.
그러고 나면, 그 멍한 정신상태에서 다시 복구를 위한 작업에 착수한다.
FinalData 라든가 LiveData라는 결코 가까지 하고 싶지 않은 프로그램을 설치하고 
수 많은 시간들을 기다려야 했다.
그러고 나면, 살리는 데이터 반, 날리는 데이터 반이였다.
아~씨바, 다시는 이런 일로 밤새우지 않으리라... 다짐 했건만...ㅡ.ㅜ


하여간, SSH를 이용한 원격드라이브의 설정까지 무사히 끝냈다면, 
이젠 하드디스크를 하나둘씩 추가하여 용량을 늘일 차례이다.
추가되는 하드디스크는 마운트를 해서 사용한다. 
기본 적인 마운트/언 마운트 명령은 아래의 명령을 이용해서 작업한다.

root@homesvr:/# mount -t ext4 /dev/sde1 /mnt

명령은 mount -t [파일시스템유형] [마운트할장치] [마운트할디렉토리] 로 구성된다.
언 마운트는 좀더 간단하다. 
명령 구성은 umount [마운트한디렉토리] 이다.

root@homesvr:/# umount /mnt


윈도우에서 사용하는 파일시스템 유형은 NTFS이다. 
NTFS를 읽기/쓰기가 가능하도록 마운트하기 위해서는 약간의 수고로움이 있다.
즉, 프로그램 하나를 설치 해야 한다.

root@homesvr:/# apt-get install ntfs-3g
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
ntfs-3g 패키지는 이미 최신 버전입니다.
0개 업그레이드, 0개 새로 설치, 0개 지우기 및 0개 업그레이드 안 함.
root@homesvr:/# (이미 설치 했다는 군요.)
root@homesvr:/# mount -t ntfs-3g /dev/sde1 /mnt


지금까지는 마운트할 하드디스크가 이미 포맷되어 있다는 가정으로 한것이다.
그러나, 처음 하드디스크를 구입할 때는 포맷이 되어 있지 않다.
하드디스크의 포맷은 아래의 그림처럼 GParted를 사용하면 간단히 끝낼 수 있다.
 



마운트 명령을 이용해서 마운트한 하드디스크는 시스템이 리붓되면, 마운트가 되지 않은 상태로 올라온다.
이것을 방지하기 위해서는 /etc/fstab 등록해 주면 된다. 아래는 본인의 서버에 설정된 fstab 이다.
add Disk 라인 위는 시스템이 알아서 설정한 부분이며, 아래의 붉은 줄은 본인이 입력해서 넣은 것이다.

UUID 대신 마운트할 때처럼 /dev/sde1 과 같이 입력해도 마운트가 되는 것으로 안다.
그러나 권장사항이 UUID를 사용하는 것 같다. 맨 아래의 NTFS 하드디스크를 마운트한 것이다.

root@homesvr:/# vi /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid -o value -s UUID' to print the universally unique identifier
# for a device; this may be used with UUID= as a more robust way to name
# devices that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda1 during installation
UUID=e544659b-d683-4e82-a2c3-8b582d1257da /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=037ff56d-08ba-4abb-a555-7ed9a68bdb91 none            swap    sw              0       0

############# add Disk #############
## /dev/sdb1
UUID=acb938e8-36ae-4cd1-b1c1-49661d5d1a45 /DataCenter               ext4    errors=remount-ro 0       1
## /dev/sdc1
UUID=5bd2619a-f0e7-4d74-bb43-baf2f5054acc /DutyDisk               ext4    errors=remount-ro 0       1
## /dev/sdd1
UUID=f6804a34-4094-480d-9fa9-186bdabe0e25 /BackupDisk               ext4    defaults   0       2
## /dev/sde1
UUID=E0C62960C62937E4  /NtfsBackup     ntfs-3g defaults,locale=ko_KR.UTF-8     0       0 


UUID는 아래의 명령으로 확인할 수 있다.
 

root@HomeSvr:~# ls -l /dev/disk/by-uuid/
합계 0
lrwxrwxrwx 1 root root 10 2011-11-10 01:06 037ff56d-08ba-4abb-a555-7ed9a68bdb91 -> ../../sda5
lrwxrwxrwx 1 root root 10 2011-11-10 01:06 4a1bf1a9-e9d0-472d-9878-3a98692d3adf -> ../../sda1
lrwxrwxrwx 1 root root 10 2011-11-10 01:06 9fa8485a-dae0-4e50-85be-e5181d37af15 -> ../../sdc1
lrwxrwxrwx 1 root root 10 2011-11-10 01:06 E0C62960C62937E4 -> ../../sde1
lrwxrwxrwx 1 root root 10 2011-11-10 01:06 acb938e8-36ae-4cd1-b1c1-49661d5d1a45 -> ../../sdb1

또는 ....

root@HomeSvr:/# blkid
/dev/ramzswap0: TYPE="swap"
/dev/sdc1: UUID="9fa8485a-dae0-4e50-85be-e5181d37af15" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdb1: LABEL="DataCenter" UUID="acb938e8-36ae-4cd1-b1c1-49661d5d1a45" TYPE="ext4"
/dev/sdd1: LABEL="BackUp" UUID="f6804a34-4094-480d-9fa9-186bdabe0e25" TYPE="ext4"
/dev/sda1: UUID="4a1bf1a9-e9d0-472d-9878-3a98692d3adf" TYPE="ext4"
/dev/sda5: UUID="037ff56d-08ba-4abb-a555-7ed9a68bdb91" TYPE="swap"
/dev/sde1: LABEL="Linux4Windows" UUID="E0C62960C62937E4" TYPE="ntfs"



마지막으로 백업에 대해서 이야기 하겠다. 나의 경우는 콜드 백업을 선호한다. 즉, 복사본을 따로 만들어 두는 것을 선호한다.
레이드의 경우, 한계가 많기 때문에 사용하지 않는다. 일단은 나와 같이 저렴한 비용으로 서버를 구축하고자 하면, 메인보드에 내장된 레이드 컨트롤러를 사용하는 것일 일반적인데 2T~3T를 넘어가면 레이드가 깨진다고 한다. 그리고, 정말 중요한 것은 사람이 손으로 삭제한 것은 레이드 따위가 막아줄 수 있는 것이 아니다. 그건 정말 지워진거다. ㅡㅡ^

그래서 나의 경우는 그냥 그때 그때 복사하는 방법을 선호한다. 그것도 중요한 데이터만...
리눅스의 cp 명령은 생각보다 많은 기능들을 제공해준다. 예를 들어 복사 대상파일이 이미 있는 경우 파일 사이즈나 업데이트 시간이 달라야 복사한다거나 중복될 경우 백업본을 자동으로 만들어준다거나 하는 기능이 있다.
그러나 나의 경우는 자동으로 백업본을 만드는 일따위는 안하며, 같은 파일을 다시 복사하는 일만 안하도록 한다. 심플하게!


아래는 백업을 위한 스크립트다. 간단히 설명하면,

1) 서버의 시간을 맞춘다.
2) /dev/sdd1을 /BackupDisk 라는 폴더에 마운트 한다.
3) 원하는 데이터를 복사한다. 복사 옵션에 -Ru를 붙여서, 복사한 파일을 다시 복사하는 일은 없도록 한다.
4) 복사가 끝나면  /dev/sdd1 의 마운트를 해제 한다.
5) NTFS로 포맷된 디스크가 한번더 2~4의 작업을 반복한다.
6) 백업완료 시간을 화면에 출력한다.

mount와 umount를 반복하는 이유는 누군가 루트에서 [rm -rf * ]를 실행하는 천인공노할 일로 부터 보호하기 위해서다.
이런 일이 없을 것 같지만... 사실 빈번하게 일어난다. 난 아직 루트에서는 해본적 없다. ^^;

root@homesvr:~# mkdir /root/MgrScript
root@homesvr:~# vi /root/MgrScript/backup.sh
#/bin/sh

## 일단 시간을 맞춘다.
/usr/bin/rdate -s time.bora.net

mount -t ext4 /dev/sdd1 /BackupDisk
cp -Ru /DataCenter/* /BackupDisk/DataCenter
cp -Ru /home/* /BackupDisk/home
umount /BackupDisk

ntfs-3g /dev/sde1 /NtfsBackup -o locale=ko_KR.UTF-8
cp -Ru /DataCenter/* /NtfsBackup/DataCenter
cp -Ru /home/* /NtfsBackup/home
umount /NtfsBackup 

echo `date -d today` -end backup



그러나, 이 백업 스크립트를 틈나는 대로 돌릴 수는 없는 일이다.
이걸 cron에 등록하여 때마다 알아서 수행하도록 해준다.
난 이것을 매일 새벽 두시에 수행될 수 있도록 했다.

# export EDITOR=vi
# crontab -e
# m h  dom mon dow   command
0 2 * * * /root/MgrScript/backup.sh >> /root/MgrScript/backup.log  <-- 입력

root@homesvr:~# cd /var/spool/cron/crontabs/
root@homesvr:/var/spool/cron/crontabs# cat root <--- 등록된 것을 확인할 수 있다.
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.ITyvFs/crontab installed on Thu Mar  1 22:53:39 2012)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
# m h  dom mon dow   command
0 2 * * * /root/MgrScript/backup.sh >> /root/MgrScript/backup.log
root@homesvr:/var/spool/cron/crontabs# 


끝.

08. SSH 터널링으로 홈서버를 사무실 내 컴퓨터로... [NAS 구축기][ubuntu 10.4]

얼렁뚱땅설명서 2012. 2. 29. 03:00



Samba를 이용하면 간단하게 파일 서버를 구축할 수 있었다. 
이렇게 구성된 삼바 서버는 대용량 저장용 데이터(영화, 음악, 사진, 문서 등등)를 내 컴퓨터에서 몰아내고,
나의 게임용 컴퓨터엔 SSD라는 쌈팍한 저장장치를 달아 날아다니게 할 수가 있다.
더구나 공유기가 기가바이트를 지원한다면 삼바서버가 느리다는 생각도 들지 않을 것이다.

그러나 삼바서버의 한계성은  로컬 네트워크에서만 동작한다는 것이다.
사무실 컴퓨터에서도 네트워크 드라이브로 잡아서 사용하고 싶지만 그럴 수 없다.
인터넷을 타고 넘을 수 없다니.... 한계다. ㅡㅡ;;;

이런 문제를 해결하기 위해서 이미 지난 시간에 SSH 서버를 설치했다.
보안 터미널로 잘 알려진 SSH는 한 시대를 풍미했던 Telnet을 몰아내고 
그 자리를 차지했을 뿐만 아니라 아주 독특한 기능까지 추가했다.

SSH 터널링은 보안 기능이 없는 서비스들에게 보안 기능을 제공하며,
원거리 전송 기능이 없는 서비스에겐 원거리 전송 기능까지 부여해주는 훌륭한 놈이다.
문제점이 있다면 TCP 프로토콜만 된다는 것이다.
그래도 삼바서버를 인터넷에 태워 사무실 내 컴퓨터 앞에 데려다 주거나,
별다방이나 콩다방에 앉아 된장남 흉내를 낼 때도 나의 삼바 서버를 놋북 앞에 가져다 준다.


Windows7을 기준으로 설명하겠다.
일단 MicroSoft Loopback Adapter를 설치해야 한다. 설치 방법은 간단하다.
[제어판 > 시스템 및 보안 > 장치관리자]를 선택한 후 [네트워크 어댑터] 항목을 선택한 후 
상단 메뉴에서 [동작(A) > 레거시 하드웨어 추가(L)] 를 선택한다. 
그러면 아래와 같은 [하드웨어 추가 마법사 시작] 이라는 화면을 볼 수 있다.
일단 다음을 누른다.



목록에서 직접 선택한 하드웨어 설치(고급)을 누르고, 네트워크 어댑터를 선택한 후 잠시 기다리면 목록이 뜬다.
그 후에 제조업체 항목에서 Microsoft를 선택하고, 네트워크 어댑터 항목에서 Microsoft Loopback Adapter를 선택하면 설치를 할 수 있다.



설치가 끝났으면 다시 [제어판>네트워크 상태 및 작업 보기>어댑터 설정 변경] 을 선택한 후 
우리가 방금 전에 설치한 [LoopBack 어뎁터]를 선택 한 후 속성(R)을 한다. 
Loopback 속성 화면이 뜨면 Internet Protocol Version 4(TCP/IPv4)를 선택하여 
IP 주소와 서브넷 마스크를 아래의 그림과 같이 10.0.0.1/255.255.255.0으로 설정하면 루프백 설정이 끝난다.



Loopback Adapter 설정이 끝나면 이제 본격적으로 SSH 터널링 작업에 들어간다. 
터널링 작업을 위해서는 일단 Putty 라는 프로그램을 사용한다.
Putty는 공짜고 내 컴퓨터에 늘 설치되어 있는 프로그램이라 사용할 뿐 ...
SSH 터널링을 위해서 이 프로그램만 사용할 수 있는 것은 아니다.
SSH 터널링을 위한 프로그램도 많고, SSH 보안 터미널은 대부분이 이 기능을 지원하는 것으로 안다.
그러나, 난 이 프로그램으로만 설명한다.

Putty 프로그램은 여기 https://bitbucket.org/daybreaker/iputty/downloads 또는 
http://www.chiark.greenend.org.uk/~sgtatham/putty/  여기서 다운 받을 수 있다.


일단 Putty 프로그램을 실행 시킨 후 Host Name(or IP Address)에 
서버에 접근할 수 있는 주소와 포트 번호를 입력한다.
그 후 [접속 > SSH > 터널링] 선택한 후 아래의 그림처럼 포워드 포트를 입력하면 된다.

1) 원 포트  - 10.0.0.1:139 대상 - 127.0.0.1:139
2) 원 포트  - 10.0.0.1:445 대상 - 127.0.0.1:139

그리고 잊지 말아야 할 것은 ...  [열기] 버튼을 클릭하기 전에 
세션 항목에 가서 저장된 세션에 적당한 이름을 입력하고 저장을 눌러야
같은 작업을 반복하지 않을 수 있다.


그런데, 한 가지 잊은 것이 있다. Windows7은 보안이 좀 강화되어서 Samba가 사용하는 포트를 막아놓았다.
이것을 해제하기 위해서는 http://www.sshvpn.de 여기에 가서 프로그램을 하나 받아서 실행해 주어야 한다.
그것도 반드시 관리자 권한으로 말이다.   아래 첨부된 파일을 다운 받아도 된다.



모든 작업이 끝났으면 이제 Putty를 이용해 접속을 한다.
그리고, 탐색기를 이용하여 루프백 주소로 설정한 10.0.0.1으로 접속한다.
접속은 탑색기의 주소 입력란에 [\\10.0.0.1] 을 입력하면 된다.
Putty로 접속하기 때문에 Putty의 접속이 끊어지지 않아야 한다.

SSH 터널링은 Samba 서비스의 경우만 사용할 수 있는 것은 아니다.
원격지에서의 서버접근 시 SSH 포트만 열어두고, 나머지는 서비스는 SSH 터널링으로 해결할 수도 있다.
응용범위가 있다. 단, TCP 서비스만 해당된다는 아쉬움이 있다.