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# 


끝.