Posts Tagged 'Linux'

Quick backup

수치해석을 위한 프로그래밍을 주로 하는 제 경험상 프로그램들을 크게 수정하기 전후로 backup을 해야겠는데 CVS, Subversion, Git과 같은 version관리 프로그램은 쓰기가 거추장스럽더군요. 그렇다고 매번 복사하기는 귀찮고 해서 빠르고 간단하게 backup 할 수 있는 python script를 작성하여 사용하고 있습니다. quickBackup.py라는 script로, 실행하면 현재 디렉토리 아래에 ./bak라는 디렉토리를 만들고 파일을 backup해줍니다. 파일 이름이 source.f90일 경우 ./bak/source.bak01.f90 과 같이 복사를 하는 것이죠.

Backup 파일 이름은 option으로 조절할 수 있고, 자동으로 log file을 만들어 언제 어떤 파일을 backup했는지 알려줍니다. 원한다면 backup하면서 간단한 comment도 달 수 있습니다. 가장 마지막에 backup한 파일과 지금 backup하려는 파일이 동일할 경우에는 backup하지 않습니다. 한번에 여러 개의 파일을 backup할 수도 있습니다.^^

 

Gpl Quick Backup
    make ‘./bak’ directory and backup files
Usage :
    quickBackup.py [-h/-b/-t] filename

Required parameters :
    filename

Optional parameters : 
    -h   : place backup number at head ( bak01.filename.extension )
   -b   : place backup number between filename and extension ( filename.bak01.extension )
    -t   : place backup number at tail ( filename.extension.bak01 )
    ** default : -b
    -c   : add comment to the log file ( ./bak/quickBackup.log )

Examples :
    quickBackup.py file1.f90 file2.f
    (edit file1.f90)
    quickBackup.py file1.f90
    ls ./bak
    -> file1.bak01.f90  file1.bak02.f90  file2.bak01.f  quickBackup.log

Backup script

1. gplBackup.sh

이 스크립트는 실수로 rm * 또는 rm –rf * 등의 명령을 내려 작업중인 source code를 삭제했을 때 복구할 수 있도록 파일들을 주기적으로 backup하는 스크립트입니다. 이 스크립트와 cron 명령을 함께 사용하게 되는데, 사용하기 위한 설정 과정은 다음과 같습니다.

1) 위의 스크립트를 Backup하고자 하는 디렉토리들이 있는 가장 상위의 디렉토리에 복사합니다.

예를 들어, /home/userid/codes/modeling과 /home/userid/codes/inversion 두 개의 디렉토리를 backup하고 싶을 때 위 스크립트를 다음의 디렉토리에 복사합니다.

/home/userid/codes/gplBackup.sh

2) 스크립트를 수정하여 backup하고자 하는 디렉토리와 확장자, backup에서 제외하고자 하는 디렉토리를 설정합니다.

Backup할 디렉토리는 dirList라는 배열에 저장합니다. Backup은 recursive하게 수행되기 때문에 subdirectory들 중 제외하고 싶은 디렉토리가 있을 경우, excDirList에 제외하고 싶은 디렉토리명을 써줍니다. Backup은 확장자나 파일명을 기준으로 하게 됩니다. Backup하고 싶은 확장자나 파일명을 extList라는 배열에 적어줍니다. 마지막으로 backupdir 이라는 변수에 backup한 파일들이 들어갈 디렉토리명을 적어주면 기본적인 스크립트 수정이 끝나게 됩니다.

예> backupdir = “/home/userid/codes/backup”

여기 적은 디렉토리는 미리 만들어 놓도록 합니다.

3) crontab -e로 crontab 파일 연 다음 아래의 줄을 추가합니다.

10 * * * * /home/userid/codes/gplBackup.sh

위의 6개의 항목이 의미하는 바는 다음과 같습니다.

분, 시, 일, 달, 요일, 실행 명령

따라서 위의 명령은 매 달, 매 일, 매 시 10분에 backup 스크립트를 실행하라는 명령입니다. 위의 줄을 추가한 후에는 crontab -l로 위의 줄이 추가되었는지 확인할 수 있습니다. 여기까지 해 놓으면 설정이 끝납니다.

위의 스크립트는 매 시 10분에 해당 디렉토리의 해당 파일들을 backup하고 스크립트 40번째 줄에 지정된 시간이 되면 디스크 용량 절약을 위해 지금까지 backup했던 파일들을 삭제합니다. 매일 지정된 시간에 생성된 파일은 남겨둡니다. 지정된 시간에 생성된 파일은 이름이 다릅니다. 기본적으로 매 시간 생성되는 파일은 “backup20090307-1210.tgz” 와 같은 이름을 가지고, 지정된 시간에 생성되는 파일은 “Backup.20090307-1510.tgz”와 같은 이름을 가집니다.

주의사항) 위 스크립트는 rm *과 같은 상황에 대비하기 위해 만든 것이기 때문에 되도록이면 주로 작업하는 code들만 backup하도록 하세요. 현재 컴퓨터에 있는 source code를 전부 backup하고 싶은 경우에는 아래의 gplFullBackup 스크립트를 사용합시다.

또, 공용 서버를 사용하는 경우, 위의 10분이라고 나온 예에서 10분을 27분, 38분과 같이 다른 사람들이 안 쓸 것 같은 시간으로 바꾸세요. 모두가 같은 시간에 backup하도록 한다면 그 시간에 컴퓨터에 많은 부하가 걸리겠죠.

2. gplFullBackup.sh

이 스크립트는 위의 스크립트와 유사한데, 매 시간 실행되는 것이 아니라 사용자가 직접 실행하도록 만든 스크립트입니다. 실행하면 “./backup/FullBackup20090226-1536.tgz” 과 같은 파일을 만들어줍니다.

Adding a new hard disk to Linux

1. 리눅스에서 하드 추가하는 법

컴퓨터를 끄고 하드를 추가하고 bios에서 하드가 인식되는 것을 확인한 후 부팅합니다. Root 계정으로 로그인한 후,
# /sbin/fdisk -l
로 새 하드가 추가된 것을 확인합니다(예 /dev/sdc).
# /sbin/fdisk
를 실행하여 추가된 하드 디스크에 새로운 partition을 만듭니다. 새 파티션을 만드는 명령은 ‘n’이고 새 파티션을 쓰는 명령은 ‘w’입니다.
# /sbin/mkfs.ext3 /dev/sdc
로 새 파티션을 포맷합니다.
# mkdir /u1
과 같이 새 하드디스크를 마운트할 directory를 만듭니다.
# mount -t ext3 /dev/sdc1 /u1
과 같이 마운트합니다.
/etc/fstab 파일에
/dev/sdc1               /u1           ext3    defaults        1 2
과 같이 추가해줍니다. 끝.

2. 리눅스에서 네트워크 하드 디스크를 마운트하는 법

node01에 위의 하드를 추가했을 때, 위의 하드를 node02에도 마운트하는 법은 다음과 같습니다.
node01에서 /etc/exports 파일에 다음과 같이 추가해줍니다.
/u1     *(rw,no_root_squash)
여기서 *은 허용하는 ip 주소입니다. 그리고
# /usr/sbin/exportfs
# /etc/init.d/nfs restart
를 실행합니다.
다음에는 node02로 가서(rsh)
# mount -t nfs -o nolock node01:/u1 /u1
을 실행합니다. 끝.

참고할만한 파일들
/etc/fstab
/etc/mtab
/proc/mount

Next Page »