HOWTO backup files, folders, disk drivers, full system

Линүкс системтэй ажилдаг хүмүүс, админ-уудад мэдэж байвал зохих нэг зүйл бол мэдээлэл (файл, гэх мэт ) нөөцлөх, нөөцөлсөн архив файлаа буцааж сэргээх үйлдэл гэж боддог юм. Өнөөдөр энэ талаар хийсэн тэмдэглэлүүдээ харж байгаад нэгтгээд жаахан бичий. Мэдээж өөрийн гараар хийж үзсэн, байнга хэрэглэдгээсээ л бичнэ. Эхлээд доорх хэдэн команд, хэрэгслүүдийг нэг google -ээд сонирхоодохоорой.

- Command-line based:
dd
dump
cpio
tar
rsync
cp
- Text-based:
Ghost for Linux (g4l)
Amanda
Taper
- GUI-based:
KDat
PerfectBackup

Алийг нь сонгох вэ? гэдэгийн хувьд хэрэглэгчийн л үзэмж гэдэг нь мэдэх хэрэг гэж бодож байна. Тэгэхдээ авсаархан хэрэгсэл хайж байгаа бол command-line based хэрэгсэлүүд, хэрэглэгчид хялбар ойлгогдохоор, ердийн хэрэглэгчдэд бол GUI-based болон Text-based хэрэгсэлүүд, Сүлжээгээр дамжуулан болон алсаас удирдан нөөцлөх үйлдлийг хийх бол command-line based хэрэгсэлүүд сонгох нь зүгээр болов уу.

Нөөцлөлт хийж болохоор командуудаас ашиглаад нэг жижигхэн shell script бичээд л нөөцлөх үйлдэл хийдэг өөрийн хэрэгсэлтэй ч болох боломжтой. Жишээ нь “cp”, “rsync”, “tar” командууд ашиглаад хамгийн амархан нөөцлөгч тоол хийж үзий. Нөөцлөх үйлдэл хийх командуудийг доорх байдлаар бичиж болно.

# cp -a src dest
(a - параметр нь архивийн горим, "dpR" гэсэн 3 параметрүүдийн хослолтой адилхан.)
# rsync -a src dest
(a - параметр нь архивийн горим, "rlptgoD"гэсэн 7 параметрүүдийн хослолтой адилхан.)
# tar -zcf backup-file.tar.gz src
(z- gunzip, c- TAR файл үүсгэх.)

Одоо бид дээрх командийн аль нэгийг нь shell script болгоод, тэгээд дараа энэ script-ээ CRON-оос цагаар удирдагдаж ажилдаг болгоод л байнгын нөөцлөх үйлдэл хийдэг амархаан хэрэгсэлтэй болчихлоо. Энэ script дээрээ “TAR” ашиглаад нөөцлөлт хийсэн файлуудаа архив болгоод тэгээд нөөц файлууд хадгалахаар бэлдсэн диск драйвер рүү хуулах үйлдэл нэмээд л бүүр бүрэн гүйцэд гэхээр нөөцлөгч хэрэгсэлтэй болж байна. Ийм аргаар WEB, MAIL, DATABASE серверүүдийн дата файлуудыг байнга нөөцлөлт хийж болно. Дамаа “rsync”-ийг сонирхоороо. Урд нөөцлөлт хийсэн файл, шинээр нөөцлөлт хийж байгаа файлуудыг харьцуулаад, зөвхөн өөрчлөлт орсон файлуудыг л нөөцлөлт хийнэ, алсаас удирдаад нөөцлөлт хийх боломжтой гэх мэтээр давуу тал ихтэй.

Disk driver-ийг бүхлээр нь, өөрөөр хэлбэл системийг бүхлээр нь нөөцлөлт хийж авах талаар 3 арга бичий гэж бодож байна. 3-уулаа миний гараар шалгагдсан болно.

1. "tar" comand based
2. "dd" command based
3. Ghost for Linux "g4l"

1. "tar" based backup.

Энэ арга бол их энгийн, ердөөсөө Линүкс системийн бух хавтас, файлуудыг "*.tar.gz" файл болгоод л авах арга юм.
Нөөцлөлт хийх дараалал:
- Эхлээд нөөцлөх үйлдэл хийж авах шаардлагагүй хавтаснуудийг тодорхойлох. Жишээ нь системийн файл хадгалдаг хавтас “/proc” (энэ хавтсан дахь файлууд бол систем ажиллаж байхад л үүсдэг, линүкс цөмийн өгөгдлийн бүтцийн файлууд юм), “/mnt”, “/media” (системийн драйверүүд), “/tmp”, за тэгээд нөөцлөх үйлдэл хийж авах шаардлагагүй хавтас бас хэрэггүй байх, гэх мэтээр тодорхойлж авна.
- За тэгээд л “TAR” командаа шаардлагатай параметртэй нь бичээд л, ENTER дарахад нөөцлөх үйлдэл хийнэ дээ. Жишээ нь доорх командийг оруулаад үзээрэй.
# tar -zcvpf /archive/backup-`date'+%d-%B-%Y'`.tar.gz --directory / --exclude=proc --exclude=mnt --exclude=tmp --exclude=archive .

Тайлбар :
---- “-z” – Gunzip файл үүсгэх, “-c” TAR төрлийн архивийн файл үүсгэх, “-p” - Файлуудын шинж чанарыг хадгалж үлдэх, буцааж сэргээх үйлдэл хийхэд тэр хэвээр нь буулгана, “-v” - Үйлдэл хийгдэж буй файл дэлгэцэнд хэвлэгдэх.
---- `date'+%d-%B-%Y'` - систэмийн цагийг хэвлэх командын гаралтийг '%d-%B-%Y' хэлбэрийн формат бүхий гаралттайгаар нөөцлөх үйлдэл-ъ гэсэн тэxт-д нэмээд нөөцлөх үйлдэл архив файлын нэр бэлэн болно.
---- `` - дотор бичсэн линүкс команд ажиллаад үр дүнг текст хэлбэрээр буцаана.
---- “--directory” – TAR үүйлдлийнхамгийн эхлэл хавтсыг зааж өгөх
---- “--exclude” – Нөөцлөлт хийхгүй хавтасыг зааж өгөх
---- “.” тухайн хавтаснs бoх файлыг нөөцлөх үйлдэл хийхийг зааж өгөх

Дээрх үйлдлийг буцааж задлах команд бичвэл:
# tar -zxvpf /archive/backup-20-February-2007.tar.gz

Тайлбар: Энд бидний мэдэхгүй архив файлыг задлах үйлдлийг зааж өгөх “-x” параметр л байна. Нөөцлөлт хийсэн архивийн файл дотроос ямар нэг файл эсвэл хавтас хайх хэрэгтэй бол доорх командыг оруулах ба нөөцлөх үйлдэл хийсэн бүх хавтас, түүн доторх бүх файлууд жагсаагдан хэвлэгдэх ба тэгээд тэндээсээ файл хайна.
# tar -ztvpf /archive/backup-20-February-2007.tar.gz
# tar -ztvpf /archive/backup-20-February-2007.tar.gz | grep -i "search-file"


2. "dd" команд ашиглаж диск драйверыг тэр чигээр нь хуулан авах.

Дэлгэрэнгүй мэдээллийг “man dd” гээд үзээрээ. Энд бид 2 адилхан дискийг нэгнээс нь нөгөөд тэр чигээр нь хуулах үйлдэлд ашиглах болно.

Үйлдлийн дараалал:
- Хуулж авах эх дискийг "primary master" болгоод, хуулагдах дискийг "secondary master" байхаар бодож залгана.
- Компьютерыг асааж, GNOPPIX зэрэг линүкс live CD, DVD -нээс системийг эхлүүлнэ.
- SU эрхээр үйлдлийг хийнэ, команд оруулахад бэлдэнэ
- fdisk -ээр дискнүүдын мэдээллийг харна
# fdisk -l

Жишээ нь бидний тохиолдолд эхний диск "/dev/hda", дараах диск нь "/dev/hdb" гэсэн байдлаар системд танигдсан байг. Мэдээж хуулах, хуулагдах диск мөн эсэхийг дахин дахин сайн шалгаарай. 2 дискээ таниулж (mount /dev/hda /folder) байгаад дахин дахин шалгаарай.
- За хуулж авах, хуулах дискээ тогтоосон бол таниулсан дискээ “umount”-аар системээс устгана.
# umount /dev/hda
# umount /dev/hdb

- "dd" командаар хуулахдаа блокын хэмжээг нь гараар оруулж өгч болдог ба тэр хэмжээ нь том байх тусмаа хурдан хуулна, тиймээс тэр хэмжээг хэдээр тогтоохыг тооцоолохын тулд "fdisk -l"-ээр хатуу дискнийхээ хэмжээг хэдэн байт болохыг харж болно.
# fdisk -l /dev/hda

Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Дээрх тохиолдолд хатуу дискний цэвэр хэмжээ “80026361856” байна, за энэ тоонд үлдэгдэлгүй хуваагдахаар тоо 512, 1024, 2048, 4096, ... хэмжээнүүдээс сонгоно. Заримдаа энэ дискний нийт хэмжээ дээрх тоонуудад цэвэр хуваагдахгүй бол хамгийн бага хэмжээ болох 512 -ийг сонгоорой. (Миний хувьд би голдуу 512 -ийг ашиглаж байсан, удаан ч найдвартай гэдэг үүднээс.)

- Нөөцлөлт хийх командаа оруулаад ENTER
# dd bs=4096 if=/dev/hda of=/dev/hdb

bs=BYTES : force ibs=BYTES and obs=BYTES
if=FILE : read from FILE instead of stdin
of=FILE : write to FILE instead of stdout

Тэмдэглэл: Би энэ үйлдлийг яг адилхан 2 хатуу диск ашиглаж байгаа тохиолдолд л хэрэглэж байсан юм, өөр хэмжээтэй хатуу дискний тохиолдолд болно гэж уншиж байсан, хуулж авах диск нь том байх хэрэгтэй нь ойлгомжтой юм. Том хэмжээтэй дискэн дээрээ нөөцлөх үйлдэл хийж авах дискнийхээ хэмжээтэйгээр яг адилхнаар хуваалт “partition” үүсгээд, тэгээд нөөцлөх үйлдэл хийх нь дээрх үйлдэлтэй адилхан. Хуваалт хийхдээ “fdisk”-ийг ашиглаарай.

3. GHOST for Linux (g4l)

Эхлээд энэ аргаар хэрхэн нөөцлөх үйлдэл хийх талаар товчхон бичвэл: Ажиллаж буй сервер, линүкс компьютерийг унтраах шаардлагатай. "g4l" бүхий боот хийдэг CD-нээс нөөцлөх үйлдэл хийх компьютерт дээрээ систем уншуулж ороод, DHCP серверээс IP хаяг авч, тухайн сүлжээн дэх FTP серверт нөөцлөх үйлдэл хийсэн архив файлыг хуулна. DHCP, FTP сервер байх шаардлагатай. Үлгэр шиг л юм болж байна уу, хэ хэ хэ
Жишээ болгоод А компьютерын “/dev/hda” диск драйверыг бүхлээр нь нөөцлөх үйлдэл хийж "my-backup-20070101.gz" гэдэг файл үүсгээд, "192.168.200.1" IP хаяг бүхий FTP серверийн "backup" гэдэг хавтсанд хуулах үйлдлийг авч үзий.

Ажлийн дараалал:

1. Интернетээс “g4l” -ийн ISO image -ийг татаж авна. (Сүүлийн хувилбар нь "g4l-v0.23.iso" гэж байгаа)
Бас баримт бичгийн файлууд ч байгаа, эхлээд баримт бичгийн файлуудыг нь уншаад, google -дээд жаахан мэдээлэл толгойдоо хийж аваараа.
http://sourceforge.net/project/showfiles.php?group_id=119810

2. Татаж авсан "g4l-XXXX.iso" файлаа CD дээр боот хийж болох байдлаар бэлдэнэ.

3. DHCP сервер, файл хуулж болохоор FTP сервер бэлдээд, энэ 3 компьютерээ нэг сүлжээнд холбоно. Мэдээж хоорондоо холбогдох байдлаар “subnet mask” болон бусад сүлжээний тохиргоог хийнэ. Энд хэрэглэх жишээнд дараах байдлаар тохируулы гэж үзий.
- DHCP IP : 192.168.200.10 -192.168.200.20
- FTP server address : 192.168.200.1

4. Бэлдсэн "g4l" бүхий боот хийдэг CD-ээ нөөцлөх үйлдэл хийх компьютерт хийж, системийг шинээр ачаал

5. За тэгээд систем уншиж ороод, IP хайг автоматаар DHCP -ээс хийгдэнэ, тэгээд команд оруулж болохоор дэлгэц нээгдэх болно. Доорх "g4l" командыг параметрүүдтэй нь оруулна.

# ./g4l with arguments ($1, $2, ... )
$1 : FTP серверийн IP хаяг (192.168.200.1)
$2 : Нөөц файлын нэр болон өргөтгөлийн хамт (image.gz)
$3 : FTP серверт хандах бичих эрх бүхий хэрэглэгчийн нэр, нууц үг ('-u user1 -p pass1')
$4 : DHCP (default: enable), нөөцлөлт хийхээр бэлдэж буй компьютерт хэрэглэх IP хаяг DHCP серверээс авахыг зааж өгөх флаг.
$5 : Нөөц файлыг хуулах FTP сервер дээрх хавтасны нэр (default : img)
$6 : Сүлжээнд холбогдох сүлжээний интерфейсийн нэр (default : eth0)
$7 : reboot – Нөөцлөлт дуусаад “reboot” хийх эсэхийг заах флаг (default: not)

Бидний жишээнд бол:
./g4l 192.168.200.1 my-backup-20070101.gz '-u bayar -p pwd' dhcp backup eth0

Тайлбар бараг хэрэггүй гэхээр тодорхой харагдаж байгаа гэж бодож байна. “default” параметрүүд таны оруулахтай адилхан бол оруулаад хэрэггүй.

6. За эндээс эхлээд их амархан болно. Текст цэс бүхий дэлгэц нээгдэх ба тэрэн дээр тохиргооны хэсэгт таны оруулсан параметрууд суугдсан байх болно. Үндсэн цэснээс харж байгаад л таны тоглолт эхлэнэ. Жишээнд "/dev/hda" –ийг нөөцөлж, FTP серверт хуулахаар байгаа тул доорх сонголтуудыг хийнэ.

- RAM Mode (ANY filesystem,every bit, local+ftp)
- Network use (Backup/restore to/from network)
- Backup (Backup drive/partition to FTP server)
- Select from : hda
Ok
(Нөөцлөх үйлдэл эхлэнэ, дуустал нь хүлээ !!! )



7. Дуусав.

http://sourceforge.net/projects/g4l
http://www.howtoforge.com/back_up_restore_harddrives_partitions_with_ghost4linux

-------------

За дээрх 3 аргыг товчхон бичвэл нэг иймэрхүү юм болж байна. Мэдээж өөрсдөө дэлгэрүүлж судлаад, ажилдаа хэрэглэх нь зүйтэй болов уу. Асуух юм байвал мэдээж мэддэг чаддаг бол хэлж өгөхдөө дуртай байх болно.

HOWTO examining file (Файл хэрхэн шалгах талаар)

Ямар нэгэн файлын мэдээллийг үздэг, хардаг, мэдэж болдог олон арга байдаг, тэднээс өөрийн хэрэглэдэг хэдийг бичий гэж бодож байна.

1. “file” командаар файлын зохиогч болон бусад системийн мэдээллийг нь мэдэж болно.

# file /bin/ls
ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped

2. "cat, less, more, grep, ..." командуудаар файлын доторх агуулгыг нь харж, үзэж, судалж болно.
# cat file.lst
# more file.lst
# less file.lst
# grep "" file.lst

Дээрх командууд бол текст файлын доторхийг дэлгэцэн дээр сайхан хэвлэх болно. “cat”, “less” -ээр уншиж болохгүй кодлогдсон, бие дааж гүйцэтгэгддэг файлын агуулгыг үзэж болох ч уншиж болохгүй баахан код хэвлэх болно. “more” команд нь тухайн файлын агуулгыг дэлгэц, дэлгэцээр таслан үзүүлэх, “grep” бол тухайн файл дотроос сонирхож байгаа текст, тэмдэгт байгаа мөрийг хэвлэх, том хэмжээний файлтай ажиллаж байхад “less” команд нь хамгийн хурдан ажиллана, . . . гээд л өөр өөрийн давуу талуудтай.

3. "man" командаар тухайн командын талаарх мэдээллийг, хэрхэн ашиглах заавар, .... гээд л холбоотой бүх мэдээллийг хэвлэж болно.
# man ls
LS(1) User Commands LS(1)

NAME
ls - list directory contents

SYNOPSIS
ls [OPTION]... [FILE]...

DESCRIPTION
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuSUX nor --sort.

Mandatory arguments to long options are mandatory for short options
too.

-a, --all
do not hide entries starting with .

-A, --almost-all
do not list implied . and ..
. . . . . .
. . . . . .

HOWTO Redirection

Линүксийн командууд голдуу дэлгэцэн дээр үр дүнгээ хэвлэдэг. Тэгвэл redirection (чиглүүлэх) буюу “>” тэмдэгт ашиглаад бид командын гаралтыг файлруу чиглүүж , файлд хадгалж болдог талаар хэдэн зүйл бичий гэж бодож байна.
Жишээ нь: Нөгөө хэрэглэх дуртай “ls” командаа ашиглан “root” хавтасан дах файл болон хавтаснуудыг жагсааж файл болгон хадгалж үзий даа.

# ls -ls
total 90092
drwxr-xr-x 30 root root 4096 Feb 8 08:46 .
drwxr-xr-x 30 root root 4096 Feb 8 08:46 ..
-rw-r--r-- 1 root root 0 Feb 8 08:46 .autofsck
drwxr-xr-x 2 root root 4096 Oct 27 17:24 bin
drwxr-xr-x 3 root root 4096 Dec 4 12:22 boot
drwxr-xr-x 9 root root 4200 Feb 8 08:46 dev
drwxr-xr-x 90 root root 12288 Feb 8 08:46 etc
.......

# ls -la > file.list
# more file.list
total 90092
drwxr-xr-x 30 root root 4096 Feb 8 08:46 .
drwxr-xr-x 30 root root 4096 Feb 8 08:46 ..
-rw-r--r-- 1 root root 0 Feb 8 08:46 .autofsck
drwxr-xr-x 2 root root 4096 Oct 27 17:24 bin
drwxr-xr-x 3 root root 4096 Dec 4 12:22 boot
drwxr-xr-x 9 root root 4200 Feb 8 08:46 dev
drwxr-xr-x 90 root root 12288 Feb 8 08:46 etc
.......

Дасгал болгоод доорх хэдийг туршаад үздээ
# ping localhost > ping.txt
# date > mydate.txt
# dmesg > system-mssg.txt
# cat /var/log/messages | grep "kernel" > system-kernel.msg

Дүгнэлт:
- “|”, “>” 2 хамтдаа хоршоод байдаг байх нээ.
- “>” бол файл шинээр үүсгэх ба урд байсан бол устгаад шинээр үүсгэдэг бол “>>” гээд ашиглавал өмнөх файл дээр залгаад бичилт хийнэ.
- “>” -ыг “<” ингээд үзвэл бас өөр үйлдэл болно шуу. “<” бол ямар нэг файл болон командын агуулгыг нь өөр нэг командын оролт болгоход хэрэглэнэ. Жишээ нь дээр үүсгэсэн байгаа “file.list” гээд файл байгаа даа. “wc” команд ашиглан файл хэдэн мөртэй, хэдэн үгтэй, хэдэн бит мэдээлэл байгааг тодорхойлбол. Энд “file.list” гээд файлын агуулгыг нь “wc” командын оролт болгон ашиглаж байна.
# wc < file.lst
31 272 1527 file.lst

- "wc" командийг ашиглан адилхан үр дүн үзүүлэхээр 3 янзаар бичилт хийж үзий.
# wc file.lst
# cat file.lst | wc
# wc < file.lst

HOWTO pipeline

Линукс системтэй ажиллаж байхад хамгийн хэрэгтэй үйлдэл бол pipeline (өгөгдөл дамжуулах) хийх юм. "|" гэсэн тэмдэгтээр хэрэглэнэ. Товчхондоо бол нэг командын гаралтыг нөгөө командын оролт болгоход хэрэглэдэг. Өөрөөр хэлбэл 2 өөр командыг ашиглан, нийлүүлэн нэг үр дүн гаргах тун хэрэгтэй үйлдэл юм. Жишээ нь "ls", "sort" гэсэн 2 командыг нэгтгэж нэг үр дүн гаргах тохиолдол:

# ls /
bin etc lost+found sbin sys tmp boot home media opt
initrd misc proc srv usr dev lib mnt root var

# ls / | sort
bin
boot
dev
etc
home
initrd
.........
.........
sys
tmp
usr
var

Тайлбар: "ls" командын үр дүнд ROOT хавтасны файл, хавтаснууд дэлгэцэнд хэвлэгдэх болно. Харин "|" ашиглаад "sort" командыг нэгтгээд үзвэл, сайхан эрэмблэгдээд хэвлэгдэж байгааг харж болно. "ls" командын гаралт нь "sort" командын оролт болж үр дүн хэвлэгдэж байна.

Жишээ нь доорх үйлдлүүдийн үр дүн юу гарахыг үзээрэй.
# ls /usr | sort -r
# ls -ls | wc
# man ls | grep "format"
# ls -ls | awk '{ print $10 }'
# more /var/log/message | grep "kernel"
# more /var/log/message | grep "kernel" | "Memory"


Дүгнэлт:
- Нэг командын мөрөнд хэд хэдэн pipeline ашиглаж болох юм байна.
- "|", "grep" энэ 2 команд хамтрахаараа зэрлэг юм байна.
- "awk" Энэ ёстой гоё доо, ... Зүгээр л "command line" дээр script бичээд элдэвлэнэ ш дээ. Дараа энэ тухай дэлгэрэнгүй бичнэ ээ.