.zshrc 에 만든프로그램으로 외부프로그램 구동이 이상해요.
제가 system rescue cd에 반해서 작업을 좀 했습니다.
전체적으로 작동이 잘되는데 마지막 문제 하나만 남았어요. 해결이 안되고 계속되는 삽질이군요.
이방법으로 운영체제 백업하면 아주 편하고 좋아요. ^^ 더 좋은 아이디어 있을지도... ^^
설명 드릴께요. 하나의 문제만 해결하면 다른 분들도 아주 편하게 사용 가능해요.
1. 파티션을 primary로 4개를 다 잡습니다. 용량은 목적에 맞게 설정합니다.
1" 파티션 : OS 와 내가 사용하는 여러 프로그램들....
2" 파티션 : 데이터만 쌓이는 곳. ( 참고로 레지스트리를 만져서 Documents and Settings 자체를 여기다가 옮겨 놓으면 굿)
3" 파티션 : Dos 부팅가능 (용량은 아주 작게요)
4" 파티션 : 여기에 system rescue cd를 넣는 거져.
2. system rescue cd 를 다운받아 CD로 만들고 메뉴얼을 보고 하드디스크에 따로 마련한 4" primary파디션에 넣습니다.
3. lilo를 죽이고
3" 파티션에서 autoexec.bat를 다음과 같이 작성합니다.
gdisk를 이용해서 3" 파티션을 숨김
loadlin으로 4" 파티션의 리눅스를 로딩하게끔 세팅
3" 파티션을 gdisk등을 이용해서 hide 시킵니다.
4. 운영체제(예를 들어 Windows XP) 에서 적당한 곳(c:\windows\system32)에 배치파일 두개를 만듭니다.
backup.bat - c:\ 에 restore라는 파일을 걍 만들고 gdisk32를 이용해서 3" 파티션의 hide를 풀고 active를 줘서 재부팅 시키게끔 작성합니다.
restore.bat - backup.bat와 같지만 restore파일을 생성하지 않게 합니다.
5. 아래와 같은 프로그램을 만들어서 4" 파티션의 /root 에 넣고 .zshrc 파일에 넣어서 자동 실행하게끔합니다.
6. /etc/fstab 에 /dev/hda1 /mnt/os vfat 1 0 이렇게 등록해서 구동시 마운드되게 합니다.
FILE * file; pid_t pid, pid2; // 속도를 위해 압축률을 0로 함. char* const argv1 [] = {"/usr/sbin/partimage", "-z0", "-o", "-c", "-f3", "-d", "-b", "save", "/dev/hda1", "/backup_os", (char*)0}; char* const argv2 [] = {"/usr/sbin/partimage", "-b", "-e", "restore", "/dev/hda1", "/backup_os.000", (char*)0}; char* const argv3 [] = {"/sbin/sfdisk", "/dev/hda", "-A1", (char*)0}; char* const argv4 [] = {"/sbin/shutdown", "-r", "now", (char*)0}; pid = fork (); if (pid < 0) { printf("fork() error"); return 1; } else if (pid == 0) //자식은 파티션이미지 구동 { file = fopen ("/mnt/os/restore", "rt"); if (file == NULL) { execv ("/usr/sbin/partimage", argv1); // 첫번째 프로그램 (백업) } else if (file != NULL) { execv ("/usr/sbin/partimage", argv2); // 첫번째 프로그램 (복구) } } else // 부모는 대기하고 파티션이미지 끝나면 또 fork() { wait ((int*)0); pid2 = fork (); if (pid2 < 0) { printf ("fork() 2 error"); return 1; } else if (pid2 == 0) // 자식은 첫번째 파티션으로 active를 바꾼다. { execv ("/sbin/sfdisk", argv3); // 두번째 프로그램 (active >> 1) } else // 부모는 기다렸다가 자식이 죽으면(? ㅡㅡ;;) 재시작한다. { wait ((int*)0); execv ("/sbin/shutdown", argv4); // 세번째 프로그램 (reboot) } }
아참 Windows XP이면 paging file을 두번째 파티션으로 변경하면 백업 용량이 줄어들죠. ^^
다끝났으면 Windows XP 에선 C:와 D:만 보입니다. 마직막 점검더 하고 backup.bat를 실행해 줍니다.
그러면 3번파티션의 hide가풀리고 active를 주면서 rebooting 되고
3번파티션의 도스가 구동되면서 자기자신을 숨기고 리눅스가 구동됩니다.
리눅스구동이 되면 /root/.zshrc파일에 등록된 위의 소스가 실행 되면서 /mnt/os에 restore파일이 없으니까 백업을 합니다.
그리고 active를 1번파티션에 주고 다시 시작하면 끝이죠.
사용하다가 이상하다 싶으면 restore.bat를 구동시키면 c:/ 에 restore를 생성하고 똑같은 작업이 이루어 져서 결국은 복원이 되지요.
이상 전체적인 설명 입니다. ;;;; 작업이 좀 되져.ㅋ 참고로 Windows XP를 사용하면 sysprep 걸어서 시만텍고스트로 디스크덤프해서
아무곳이나(어떤 칩셋이나) 밀면 적용가능해져요.. ^^
마지막 한가지의 문제는 위의 소스코드 실행시 .zshrc에 등록않하고 실행하면 아주 제대로 동작을 합니다.
그런데 등록하고 구동하면 patimage구동시 바로 DONE 하고 빠져나와서 나머지 가 실행됩니다.
실행은 된다는 거져.
왜 .zshrc에 넣기만하면 그러죠? 위 소스가 문제가 있나요? 아니면 .zshrc에 잘못 등록을 했나요?
.zshrc파일의 마지막 줄에 걍 ./tset라는 파일로 컴파일해서 넣어놨어요.
해결했어요...ㅡㅡ;;
힘드네요.
제가 멍청했습니다.
가상콘솔들에서 전부 동시에 실행되어서 문제를 일으겼네요
지금에서야 알았어요.
가상콘솔
1
2
3
4
5
6
이 있으면 6이 가장 먼저 실행이 되는군요.. 이상하네요.
왜그러죠?
댓글 달기