2013년 2월 24일 일요일

tar backup


http://www.ssovi.com/zb/view.php?id=pds&page=12&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=hit&desc=asc&no=358

백업 용어 정리

- 풀 백업 (full backup)
파일 셋 안의 모든 파일을 포함해서 모두 복사하는 방법 
하나의 컴퓨터 시스템이나 하나의 디스크 파티션에서 사용
새로운 커널을 만든다거나 새로운 어플리케이션 팩키지를 추가한다든지 또는 
새로운 버젼의 운영체제를 설치하는 등의 시스템에 중요한 변화를 주었을 경우 

- 증분 백업 (incremental backup)
시스템이 이전에 백업한 이후로 변경된 파일만을 복사
풀 백업이 너무 방대하고 자료 변경이 별로 없을 때

- 백업 단계 (backup level)
단계(level) 0 : 풀 백업
단계(level) 1 : 마지막 풀 백업(단계 0) 이후에 변경된 모든 파일 저장
단계(level) 2 : 마지막 단계 1 백업 이후에 변경된 모든 파일 저장

- 무인 백업 (unattended backup)
cron을 사용해 백업 명령어가 자동으로 수행
보안이 확실히 보장될 때가 아니면 무인 백업은 사용하지 않는것이 좋다.



tar
테이프 생성을 위한 유틸리티로서 바이너리 데이터를 처리할 수 있다. 또한 여러 디렉토리를
아카이브로 묶을 수 있으며 링크를 포함하는 디렉토리들을 전송할 수 있으면서도
파일의 소유권과 액세스 퍼미션 등도 그대로 보존할 수 있는 장점이 있다.


간단한 tar의 사용법

tar의 플래그
c : 아카이브 생성
x : 아카이브로 부터 파일 추출
t : 목차 테이블 보기
v : 상세한 정보 출력


$ cd /
$ tar -cf backup.tar home

/home 의 하위디렉토리를 포함하여 backup.tar로 저장

$ gzip backup.tar
backup.tar.gz 이라는 파일을 생성하여 원래의 tar 아카이브보다 훨씬 더 작게 압축

$ cd /
$ tar -cf - home | gzip > backup.tar.gz

$ tar -cvf - home | gzip > backup.tar.gz 을 하였을때는 tar에 따라서 v(verbose)
옵션을 stderr로 처리하지 않고 stdout으로 처리하여 문제를 일으키는 경우가 있다
따라서 아카이브를 만들때는 v옵션을 빼는 것이 좋고, 아카이브를 풀 때는 v 옵션과
관계가 없다.

$ gunzip backup.tar.gz
$ tar -xf backup.tar

$ zcat backup.tar.gz | tar -xf -

GNU tar의 경우 gzip 처리를 내장하고 있다. 따라서 다음과 같이 처리할 수 있다.
$ cd /
$ tar -czf backup.tar.gz home

$ tar -xzf backup.tar.gz 


$ tar -tf backup.tar
아카이브를 풀기전에 항상 파일들의 이름을 먼저 검사한다
만일 아카이브 소그이 파일들이 현재 디렉토리에 풀리도록 묶여 있다면,
임시 디렉토리를 새로 하나 만들고, 그곳으로 이동(cd)하여 파일들을 풀어낸다.



일부 파일들만 뽑아내기
$ tar -xvf backup.tar filename
여기서 filename은 tar의 t옵션으로 파일의 경로명까지 알아야 한다.
filename과 ./filename은 서로 다르므로 정확한 파일명을 지정해야 한다.

$ tar -xvf backup.tar `tar -tf backup.tar|grep filename`
의 방법을 쓰는 것도 좋다.



절대 경로 문제
절대경로를 갖는 디렉토리 또는 파일을 복구할때 문제가 발생한다.
tar는 아카이브에 지정되어 있는 경로명으로 파일을 복구하기 때문에
파일이 복구될 곳을 변경할 수가 없다. 따라서 이미 존재하는 파일을 덮어쓰거나
퍼미션 문제가 발생할 수 있다.
GNU tar의 경우, 기본적으로 모든 절대 경로명을 상대경로 변경하여 아카이브를 만든다.
--absolute-names 옵션을 사용하면 절대 경로로 아카이브를 만든다.

가장 좋은 방법은 아카이브를 만들때 디렉토리가 슬래시(/)나 틸드(~)로 시작하지
않도록 조심하는 것이다.

또는
$ cd /
$ tar -cf backup.tar .
를 줄여서

$ tar -cf backup.tar -C / .
-C 옵션은 아카이브를 생성하기 전에 /로 이동하도록 한다. 여러 개의 디렉토리들을
아카이브로 만들려면 -C옵션을 여러번 사용한다.

$ tar -cf backup.tar -C /home/smiletw . -C /home/woody ./test



아카이브에 추가하기
4 tar -uvf backup.tar home
새로운 파일들만 업데이트 한다.
동일한 파일이 업데이트 되면 아카이브 마지막에 추가한다.
(테입장치에서는 중간에 넣을 수 없는 것을 감안)



GNU tar를 이용한 풀백업 및 증분 백업

일반적으로 tar를 이용해서 아카이브를 만들면 풀백업이 된다. 그러나 사용자 홈디렉토리
또는 한 파티션 전체를 백업할때는 풀 백업을 자주 사용하기 힘들다. 이럴경우 풀 백업과
함께 증분 백업을 해 주는 것이 좋다. GNU tar는 옵션 처리만으로 손쉽게 풀백업과
증분 백업이 가능하게 해준다.
먼저 GNU tar의 풀 백업 및 증분 백업에 쓰이는 옵션이 2가지 있다. -G (--incremental)
옵션과 -g snapshot-file (--listed-incremental) 이 그것이다.
-G 옵션은 예전 증분 백업 포맷으로 아카이브를 생성해 준다. 이 옵션으로 생성된
아카이브에는 아카이브 내에 포함되어 있는 파일이나 디렉토리의 정보가 들어가므로
비표준 아카이브로 생성된다. 따라서 GNU버젼이 아닌 tar로도 내용을 볼 수가 없게 된다.
-g snapshot-file 옵션은 표준 아카이브로 생성되면서, 파일이나 디렉토리 등의 정보를
snapshot-file에 따로 저장함으로써, 표준 아카이브를 생성하게 만들어 준다. 따라서 
GNU tar를 이용한 풀 백업 및 증분 백업에서는 -G 옵션이 아닌 -g snapshot-file 옵션을
사용하는 것이 좋다.

풀 백업
$ tar -g list -czvf backup.tar.gz home/
list 라는 snap-shot 파일이 생성된다. 그리고 backup.tar.gz이라는 백업된
아카이브가 생성된다.

증분 백업
$ tar -g list -czvf backup-1.tar.gz home/
기존의 list 파일에서 이미 풀 백업된 내용을 확인하고, 그 이후에 변경되거나 추가되거나
삭제된 파일들을 backup-1.tar.gz에 백업한다.



GNU tar를 이용한 복구

먼저 풀 백업된 아카이브를 복구한다.
$ tar -g list -xzvf backup.tar.gz
다음으로 증분 백업된 아카이브들 중 가장 최근에 백업한 것만 복구하면 된다.
$ tar -g list -xzvf backup-10.tar.gz

백업 및 복구의 유용한 옵션
-W (--verify) 검증
백업을 하는 도중 변경되는 파일이 있을 경우가 있다. 특히 풀 백업과 같이 시간이 
오래 걸리는 백업의 경우 아카이브가 생성되는 동안 변경될 가능성이 높다. 따라서
풀 백업의 경우 검증해주는 것이 좋다.
$ tar -g list -cvf backup.tar home/
이 경우 아카이브 생성 후, 아카이브의 내용과 실제 디렉토리의 내용과 같은지 확인한다.
그러나 gzip으로 압축하는 -z 옵션과 같이 사용할 수 없다. 따라서 검증 옵션을 사용해서
아카이브를 생성할 경우 gzip압축은 따로 해주어야 한다.



백업 정책

GNU tar의 경우 앞서 말한 level 1 백업까지만을 지원해 준다. snapshot-file이 없을
경우 풀 백업(level 0)을 하고, snapshot-file이 이미 존재할 경우 증분 백업(level 1)을
하게 된다. 따라서 어느 시점에 풀 백업을 해야 하는지가 백업 정책에서 중요하다.
백업할 파일들이 자주 변경될 경우, 풀 백업의 주기도 짧아진다. 또한 변화될 데이터가
매우 중요할 경우, 백업도 자주 해야한다.
일반적으로 level 1 백업만을 지원해 주는 GNU tar를 이용한다면, 1주일에 한번 풀 백업
을 실행하고 매일 증분 백업을 한다. 백업하는 시간은 파일의 변화가 적은 새벽이 좋다.
따라서 일요일 새벽12시를 전 후해서 풀 백업을 하고, 매일 새벽에 증분 백업을 하는 것이
좋다.
또한 풀 백업의 경우, 검증 옵션 (-W)을 사용하여, 아카이브를 검증해주는 것이 좋다.
그리고 아카이브의 크기를 줄이기 위해서 -z 옵션을 사용하여 압축해 주는 것이 좋다.
아카이브를 만들 때는 아카이브의 이름에 신경을 써주어야 백업을 할 때, 혼란이 적다.
풀 백업을 할 경우 다음과 같이 snapshot-file의 이름도 백업 날짜를 써주는 것이 좋다.
$ tar -g 2002-05-11.list -W -cvf 2002-05-11-full.tar home/

증분백업 때도 마찬가지로 날짜를 써 주는 것이 좋다.
$ tar -g 2002-05-11.list -czvf 2002-05-12.tar.gz home/

그리고 -g 옵션에 쓰이는 snapshot-file의 보관 또한 중요하다. snapshot-file이 없으면
증분 백업된 아카이브는 수정된 부분만 저장되어 있는 일반 아카이브와 같아진다. 즉, 
풀 백업 이후 삭제된 파일이 있음에도 불구하고, 증분 백업된 아카이브를 복구할 때,
풀 백업된 아카이브의 복구때 생성된 파일이 삭제되지 않는다. 따라서 용량이 작은
snapshot-file은 꼭 따로 안전한 곳에 보관해 주어야 한다.

참고문헌
--------
유닉스 파워툴 (한빛 미디어)
시스템 관리의 핵심 (한빛 미디어)

2013년 2월 22일 금요일

How to set up a clean UTF-8 environment in Linux

http://perlgeek.de/en/article/set-up-a-clean-utf8-environment

How to set up a clean UTF-8 environment in Linux

Many people have problems with handling non-ASCII characters in their programs, or even getting their IRC client or text editor to display them correctly.
To efficiently work with text data, your environment has to be set up properly - it is so much easier to debug a problem which has encoding issues if you can trust your terminal to correctly display correct UTF-8.
I will show you how to set up such a clean environment on Debian Lenny, but most things work independently of the distribution, and parts of it even work on other Unix-flavored operating systems like MacOS X.

Choosing an encoding

In the end the used character encoding doesn't matter much, as long as it's a Unicode encoding, i.e. one which can be used to encode all Unicode characters.
UTF-8 is usually a good choice because it efficiently encodes ASCII data too, and the character data I typically deal with still has a high percentage of ASCII chars. It is also used in many places, and thus one can often avoid conversions.
Whatever you do, chose one encoding and stick to it, for your whole system. On Linux that means text files, file names, locales and all text based applications (mutt, slrn, vim, irssi, ...).
For the rest of this article I assume UTF-8, but it should work very similarly for other character encodings.

Locales: installing

Check that you have the locales package installed. On Debian you can do that with.
$ dpkg -l locales
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-============================================
ii  locales        2.7-18         GNU C Library: National Language (locale) da
The last line is the important one: if it starts with ii, the package is installed, and everything is fine. If not, install it. As root, type
$ aptitude install locales
If you get a dialog asking for details, read on to the next section.

Locales: generation

make sure that on your system an UTF-8 locale is generated. As root, type
$ dpkg-reconfigure locales
You'll see a long list of locales, and you can navigate that list with the up/down arrow keys. Pressing the space bar toggles the locale under the cursor. Make sure to select at least one UTF-8 locale, for example en_US-UTF-8 is usually supported very well. (The first part of the locale name stands for the language, the second for the country or dialect, and the third for the character encoding).
In the next step you have the option to make one of the previously selected locales the default. Picking a default UTF-8 locale as default is usually a good idea, though it might change how some programs work, and thus shouldn't be done servers hosting sensitive applications.

Locales: configuration

If you chose a default locale in the previous step, log out completely and then log in again. In any case you can configure your per-user environment with environment variables.
The following variables can effect programs: LANG, LANGUAGE, LC_CTYPE, LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES, LC_PAPER, LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION.
Most of the time it works to set all of these to the same value. Instead of setting all LC_ variables separately, you can set the LC_ALL. If you use bash as your shell, you can put these lines in your ~/.bashrc and ~/.profile files:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
To make these changes active in the current shell, source the .bashrc:
$ source ~/.bashrc
All newly started interactive bash processes will respect these settings.

Locales: check

Run the locale program. The output should be similar to this:
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
If not you've made a mistake in one of the previous steps, and need to recheck what you did.

Setting up the terminal emulator

Setting up the terminal emulator for your terminal emulator strongly depends on what you actually use. If you use xterm, you can start it as xterm -en utf-8, konsole and the Gnome Terminal can be configured in their respective configuration menus.

Testing the terminal emulator

To test if you terminal emulator works, copy and paste this line in your shell:
perl -Mcharnames=:full -CS -wle 'print "\N{EURO SIGN}"'
This should print a Euro sign on the console. If it prints a single question mark instead, your fonts might not contain it. Try installing additional fonts. If multiple different (nonsensical) characters are shown, the wrong character encoding is configured. Keep trying :-).

SSH

If you use SSH to log in into another machine, repeat the previous steps, making sure that the locale is set correctly, and that you can view a non-ASCII character like the Euro sign.

Screen

The screen program can work with UTF-8 if you tell it to.
The easiest (and sometimes the only) way is to start it with the -U option:
$ screen -U
and also when detaching (screen -Urd or so).
Inside a running screen you can try Ctrl+a :utf8 on. If that doesn't work, exit your screen and start a new one with -U

2013년 2월 21일 목요일

How to change the binding of Windows key which runs Unity's Dash?

http://askubuntu.com/questions/21934/how-to-change-the-binding-of-windows-key-which-runs-unitys-dash

 just installed Ubuntu 11.04 and I was able to use gconf-editor to change the shortcut key.
Make sure you're not running gnome-do! (If it's set to use your key combo, the Dash won't be able to bind to those keys.)
Open a terminal and run gconf-editor
Navigate to this key:
/apps/compiz-1/plugins/unityshell/screen0/options/show_launcher
Modify the show_launcher key to a single key value.
The key in gconf-editor
I set the value to space and now Super+space opens the dash instead of Super. Note that if you use a key combo, it seems to take a minute before you can use that to invoke the Dash. You also need to complete the key combo quickly.

If you want a more user-friendly interface, you can use the command line:
gconftool --set /apps/compiz-1/plugins/unityshell/screen0/options/show_launcher --type=string "space"
Or use compizconfig-settings-manager Install compizconfig-settings-manager: In the Desktop section, select Ubuntu Unity Plugin. Set Key to show the launcher to be your desired keys. Again, it takes a minute before you can invoke the Dash.

sublime close without confirmation

  Close without confirm   Yes, you can just write a plugin to set the view as scratch and close it. Then create a keybinding for that c...