우분투 복원 할때 파티션 개념좀 알려주세요~~

안녕하세요.
윈도우와 우분투를 120G SSD 와 750G HDD에 멀티 부팅 하게 셋팅 하였습니다.
파티션은 구분은 아래와 같습니다.
SSD 120기가 -> 90g C: 윈도우 fat
-> 20g 우분투 /
-> 2g 우분투 swap

HDD 750기가 -> 200g 우분투 /home
-> 나머지는 ntfs 윈도우,우분투 공용 파티션

일단 우분투 시스템(/)만 SSD에 설치하고 Home은 용량 때문에 HDD에 설치 하였습니다.
질문입니다.

  1. 위와 같이 셋업 한 것과, 그냥 /,SWAP,/home 모두 HDD에 설치 할 때에 부팅 OR 프로그램 실행할 때 속도 차이가 있나요???
  2. 일단 위와 같이 / 와 /home 설치 경로 파티션이 다를 경우 tar로 백업 하고 복구 할 때 어떻게 되나요??
    tar로 백업 및 복구시 파티션이 같아야 하나요?? 아니면 /home은 빼고 백업 하고 나중에 따로 복사해서 넣으나요??

아무래도 ssd에 시스템을 까는것이 빠르겠네요
프로그램들은 usr 쪽에 깔리니까 나중에 용량부족하면 usr만 띄어서 hdd로 옮기면 될것 같아요.

전체 백업은 그냥 / 에서 cp나 tar 로 하면 전체 파티션을 찾아요.

아직 설치하지 않으신 것이라면, SWAP은 hard disk 쪽으로 잡으시는 것으로 변경하는 것이 어떨까합니다. SWAP partition은 읽기 속도가 빠른 것이 중요하지 않다는 점, SWAP parition은 쓰기를 전제로 한 것이므로 SSD보다는 HDD가 어울린다는 점, Linux root partition이 20 GB로 조금은 작아 보인다는 점을 고려한 의견입니다. 그래서 SWAP은 HDD로 돌리고, root partition을 22GB로 늘리면 어떨까요?

참고로 말씀드리자면, 요즘 많이 개선되었지만, SSD는 쓰기를 매우 빈번하게 하면 좋지 않다고 알려져 있죠? 그래서 /tmp와 /var를 hard disk 쪽으로 돌리는 것을 권하는 의견도 본 적이 있습니다. 이는 파티션을 따로 만들지 않고도 /home 아래에 tmp와 var folder를 만들어 소유자와 permission을 /tmp와 /var와 같게 한 후 symbolic link를 하면 된다고 하더군요. 근데, 이 방법은 단점도 있어서 그냥 참고 사항일 뿐입니다.

[quote:a2ikc9vf]1. 위와 같이 셋업 한 것과, 그냥 /,SWAP,/home 모두 HDD에 설치 할 때에 부팅 OR 프로그램 실행할 때 속도 차이가 있나요???[/quote:a2ikc9vf]

당연히 하늘과 땅 차이죠. 위와 같이 셋업하셔서 쓰다가, HDD에만 설치한 것으로 다시 돌아가면 답답해서 견디지 못하십니다.

[quote:a2ikc9vf]2. 일단 위와 같이 / 와 /home 설치 경로 파티션이 다를 경우 tar로 백업 하고 복구 할 때 어떻게 되나요??
tar로 백업 및 복구시 파티션이 같아야 하나요?? 아니면 /home은 빼고 백업 하고 나중에 따로 복사해서 넣으나요??[/quote:a2ikc9vf]

GNU/Linux는 디스크나 파티션을 구분하지 않고, 파일 시스템은 루트를 꼭대기로 하는 단일 계층 구조이므로 tar가 백업 복구하는데 문제가 없습니다. 좋은 방법입니다. 하지만, 저렇게 하셨다면, root partition은 20G 내외이므로 dd를 이용하여 파티션 전체를 그대로 백업하고, /home은 tar로 백업하는 것이 어떨까 합니다. /home은 파티션 전체를 백업하기에는 너무 커서 비현실적이라는 것이 명백합니다. 하지만, root parition은 파티션 전체를 백업해도 시간이 그리 오래 걸리는 것도 아니고, 복원할 때, 완벽하게 똑같이 복원되니까요.

회신 해 주신 분들 감사합니다.
"GNU/Linux는 디스크나 파티션을 구분하지 않고, 파일 시스템은 루트를 꼭대기로 하는 단일 계층 구조이므로 tar가 백업 복구하는데 문제가 없습니다. 좋은 방법입니다."
결국 주파티션, 논리파티션, 물리적 파이션이 달라도 tar로 복구하는것은 문제가 없다는 것인가요??
제가 SSD만 포맷 -> 윈도우 재설치(90Gbyte) -> 우분투 CD로 재설치(20Gbyte) 하였습니다.
그리고 원래대로 복원을 시도하였습니다.
tar cvpzf backup.tgz.gz --exclude=/proc --exclude=/lost+found --exclude=/media --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /
이거 명령 해서 백업해 놓은 파일을 (40Gbyte용량)
tar xvpfz backup.tgz -C /
이렇게 했습니다. 우분투 설치 공간이 20G 이기 때문에 용량 부족이라고 뜨네염.

파티션 구분 안한 다고 하였는데, 왜 전부 /에 복원이 되나요??
제가 하고 싶은건 지금 ssd의 /와 hdd의 /home을 같이 백업 하였는데, 복원도 ssd의 /도 복원되고, hdd /home 도 복원 되어야 하는거 아니가요???

리눅스는 기본적으로 루트 디렉토리 밑에 모든게 들어갑니다.
그러니까, 당연히 tar로 복구하게 되면, 몽땅 루트 디렉토리 밑에 들어가게 됩니다.

하지만, 외부 저장 매체의 경우, 매체를 가상화해서 가상디렉토리 개념으로 접근하게 됩니다.
이것이 흔히 말하는 마운트(mount:올라타다)의 개념으로, 장치를 디렉토리 처럼 인식하게 하는 것입니다.

그러니까 /home등을 복구하시려면, 먼저 SSD가 아닌, 하드디스크에 home으로 사용할 파티션을 만들어 주시고,

#마운트포인트(/home 디렉토리에 파티션을 마운트)를 생성
sudo mkdir /home
#마운트 포인트에, 파티션을 마운트
sudo mount /dev/장치파티션 /home

이렇게 하셔야 합니다.
여기서 장치 파티션은 sda1 이런 식으로 이름을 갖게 되는데,
s는 스카시장치를 의미하는 것으로, SATA도 이에 해당합니다. (h는 IDE)
d는 하드 디스크를 의미합니다. (sr은 시디롬을 의미)
a는 첫번째 디스크를 의미합니다. (b는 두번쨰 디스크)
1은 첫번째 파티션을 의미합니다.

이를 잘 모르신다면, sudo blkid 명령으로 확인하시는 것이 좋습니다.

비단 /home 뿐 아니라, /var, /tmp등도 따로 파티션을 만드셨다면, 마찬가지로 마운트 하셔야 합니다.
그리고, 매번 이렇게 하기는 불편하기 떄문에,
/etc/fstab에 적어 놓으면, 자동으로 마운트하게 됩니다.

label로 적기

#/dev/disk/by-label/LINUX-HOME /home ext4 defaults,noatime,nodiratime 0 1

uuid로 적기

#UUID= aeb0b21c-de68-483e-a4e2-fd97dc69f94f /home ext4 defaults,noatime,nodiratime 0 1

장치명으로 적기

/dev/sdb1 /home ext4 defaults,noatime,nodiratime 0 1

그 외에 디스크(파티션 포함)를 통쨰로 백업/복원하시려면, clonezilla를 사용하시는 것도 좋습니다.
하지만, 이렇게 하시면, 파티션 자체도 그대로 복구되기에, 파티션을 변경하여 복구하시는데는 애로사항이 있습니다.
그러니까 일반적인 방법은 역시 tar백업이나, rsync 백업이 되겠습니다.

디스크(파티션 포함)를 통쨰로 백업/복원하시려면…

통쨰???

훌륭한 답글을 많이 달아주시는 protochaos 님도 두벌식을 쓰시는 듯.

[quote="without22":ln1vltkc]파티션 구분 안한 다고 하였는데, 왜 전부 /에 복원이 되나요??
제가 하고 싶은건 지금 ssd의 /와 hdd의 /home을 같이 백업 하였는데, 복원도 ssd의 /도 복원되고, hdd /home 도 복원 되어야 하는거 아니가요???[/quote:ln1vltkc]

제가 너무 단순화 시켜서 답변하는 바람에 문제가 꼬였군요. 죄송합니다. 배경 설명은 protochaos 님꼐서 친절하게 해주셨으니 부연하지 않겠습니다. 다만, "파티션을 구분하지 않는다"는 개념이 한 단면 만을 이야기하는 것이기는 하지만, 그 사실 때문에 문제가 생긴 것이긴 합니다. 우선 tar fiile을 만들 때에는 파티션을 구분하지 않으므로 /를 tar 했는데 /home까지 모두 들어간 것입니다. 윈도 같으면 어림없는 일이죠. 복구할 때 왜 제대로 안되었는지는 protochaos 님이 설명하셨습니다. 다른 측면에서 이 현상을 설명하자면, 파티션을 구분하지 않기 때문에, 말을 바꾸면, tar가 파티션을 모르기 때문입니다. tar file에는 파티션 정보가 없거든요.

따라서, without22 님의 경우, 백업은 단일 백업이 가능하지만, 풀어내실 때에는 구분해서 풀어내시는 것이 좋겠네요. 즉, --exclude를 잘 사용할 줄 아시니, tar file에서 /를 풀어낼 때 home를 제외하고 풀어내시고, home에서는 tar file에서 home만 떼어내서 풀어내시는 것이죠. 여전히 좋은 백업 방법이라고 생각됩니다. 단, 이 방법은 가끔 문제를 일으킵니다. 예를 들어 디스크 파티션의 uuid가 변경되는 경우 등입니다. 파티션까지 다시 하고 나서 이 방법으로 복원하는 경우, 고려하셔야 합니다.

백업 전략과 관련하여… 저라면 백업을 이렇게 하겠습니다. 제 생각에는 가장 속편한 방법입니다. 그러나, 제 생각일 뿐이고 저마다 호/불호가 있지요. 즉, tar를 쓰는 것보다 좋다고 주장하는 것은 아닙니다.
(1) SSD는 디스크 이미지 통째로 백업하거나, Windows 파티션과 우분투 파티션을 각각 파티션 이미지로 백업합니다. 전체 백업과 파티션 백업은 각각 장단점이 있는 듯합니다.
(백업한 디스크 이미지를 저장할 마땅한 곳이 없다면 HDD의 일부를 이 목적으로 사용할 용의가 제게는 있습니다.)
(2) HDD는 /home과 공통 부분을 tar+bzip2로 백업합니다. 이를 암호화하여 cloud service에 올려둡니다.

현재에도 저는 위와 같은 방식으로 백업하고 있습니다. 구성이 달라서 정확하게 위처럼 하지는 않지만, 위의 취지로 백업하고 있습니다. 특히 우분투의 경우 실험적인 일을 하는 경우가 많아서 이미지 백업을 해두면 복구하는데 아주 좋습니다.

쿨럭 저는 백업을 안합니다… 크크.
공간이 넉넉하지 않으니까요. 앞으로 brfs 스냅샷을 써볼까 합니다.

제가 추천하는 것은, /, /boot, /home, /data 을 따로 분리하는 것입니다.
/home파티션은 자신이 주로 사용하는 파티션이기 때문에, 최소한의 부분적인 백업은 합니다.
/data파티션은 주로 저장공간으로 사용하기에 해당 파티션에 대해서는 주로 디렉토리별로 접근하게 되고,
이 안에서 주로, 리눅스 명령을 사용할 일이 별루 없습니다.
/boot파티션은, 커널과 부트로더를 담아 놓는 것으로, 루트 파티션이 날아가더라도, 램디스크부트나, ISO부팅이 가능하게 합니다.

그래서, 저는 주로 사용하는 방법이, /var/lib/dpkg/status 파일과, /etc의 백업(압축 복사)과 재 설치 입니다.
status파일에는 현재 설치되거나, 부분 설치되거나, 삭제되었는데 기록이 남은 정보가 담겨 있어서,
이것을 통해, 패키지 목록을 산출하여, 재설치후, 패키지를 다시 설치합니다.
재설치시에는 주로 변경되는 부분이 /파티션이고, 사실 /파티션에서 제일 중요한 디렉토리는 /etc입니다.
각종 설정들이 저장되어 있기에, 이것만 있어도, 재설치 후, 패키지를 다시 설치하고, 설정을 다시 잡아, 원상태에 비슷하게 복구가 가능합니다.

윈도우즈에서는 시스템 디렉토리가 가장 중요하겠지만, 리눅스는 무료 소프트웨어들로 가득차 있어서,
프로그램이야 다시 설치하면 그만입니다.
어둠의 경로로 입수하여 크랙하고, 시리얼 넣고, 또는 각종 패치(한글패치)를 해서,
날아갔을때, 그거 다시 하는 일은 없으니까… 설치하고, 설정들만 되살리면 됩니다.

물론 백업을 할 수 있는 상태라면 좋겠지만, 저는 저장공간도 백업할 만큼 넉넉지 못해서요.

파티션이나, 디스크 단위의 백업을 하지 않기 때문에, 문제가 발생하면, 수동으로 복구를 하고,
이 과정에서 많은 것을 배웠죠. ㅋㅋㅋㅋ

아. 제가 tar로 복원을 하니까…잘 되네염.
그런데 궁금한게 생겨서요.
제가 tar로 백업을 했는데, tar cvpzf /media/Local_Disk/OS_Image_u1204/sysbackup.tgz.gz --exclude=/proc --exclude=/lost+found --exclude=/media --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /
여기서 proc, sys 폴더는 제외 했는데 이유가 뭔가요?? 인터넷에서는 저거 빼고 하라고 하고 나중에 부팅 되면 폴더만 만들어 주면 된다고 그러던데.
제가 복구하고, proc, sys 폴더 만들어 주고, 부팅 하니까 잘되네염.

그리고 혹시 proc나 sys를 포함 시키고 tar로 백업한번 해봤는데, 무슨 권한이 없다고 에러 막 나네요.
그럼 proc, sys를 삭제 후 다시 디렉토리만들어서 복구하면 완전히 복구가 된건가요??

매번 감사합니다.~~ ^^*

[quote="without22":30qx2zdc]여기서 proc, sys 폴더는 제외 했는데 이유가 뭔가요?? 인터넷에서는 저거 빼고 하라고 하고 나중에 부팅 되면 폴더만 만들어 주면 된다고 그러던데.
제가 복구하고, proc, sys 폴더 만들어 주고, 부팅 하니까 잘되네염.

그리고 혹시 proc나 sys를 포함 시키고 tar로 백업한번 해봤는데, 무슨 권한이 없다고 에러 막 나네요.
그럼 proc, sys를 삭제 후 다시 디렉토리만들어서 복구하면 완전히 복구가 된건가요??[/quote:30qx2zdc]

/proc와 /sys는 실제로 hard disk에 존재하는 것이 아닙니다. 제가 이해하고 있기로는, /proc와 /sys는 kernel이 관리하는 memory의 일정 부분이 mounting되어 있는 것입니다. GNU/Linux manual page를 비롯한 공식 문서에는 이것들을 pseudo-file system이라고 설명하고 있습니다. (pseudo-file system의 개념을 잘 아시는 분은 설명 좀 부탁 드립니다.) /proc는 kernel이 관리하는 process 정보가 담긴 memory가, /sys는 kernal이 관리하는 device (system에 연결된 device)들에 관한 정보가 담긴 memory가 각각 mounting되어 보여지고 있다는 것이죠. 말을 바꾸면, 부팅 후에 /proc 와 /sys 폴더 아래에 보이는 것들은 부팅 전부터 하드 디스크에 원래 있던 파일/폴더가 아니고, 부팅 후 kernel이 관리하는 memory에 있는 것들이 보여지는 것이라는 말씀입니다. 이들은 주로 debugging이나 diagnostic에 사용된다고 들었습니다.

이런 이유로 /proc와 /sys 안에 들어있는 모든 것은 실제로 존재하는 것이 아닙니다. folder 자체만 존재하는 것이죠. 실제로 우분투 설치할 때 사용했던 live USB로 부팅하여, 디스크에 있는 이 두 개의 folder를 한번 들여다 보세요. 텅~ 비어있는 것을 보시게 됩니다.

이제 백업할 때 /proc와 /sys를 제외하는 이유를 아셨을 겁니다. 원래 비어있는 자리이니 백업을 하면 엉뚱한 것을 하는 것이죠. 백업을 해도 안되는 것은 아니지만, 소중한 하드디스크 공간의 낭비라는 이야기죠. 복원하는 경우, 원래 비어있는 자리이니 폴더만 만들어 주면, 부팅 했을 때, kernel이 알아서 채울 것입니다. 물론 엉뚱한 데이터로 백업한 것을 채워도 안될 것은 없지만, 역시 디스크를 낭비하는 것이고요.

와~~~
감사 감사~~ ^^*

일종의 메모리맵 파일이라고 보시면 됩니다.
겉모양은 파일이지만, 실제로 디스크에 써지는게 아니라, 메모리에서 직접 읽혀지고, 써지는 파일이라는 것이죠.
백업하실때, /proc, /sys, /dev, /dev/pts 는 모두 제외하셔야 합니다.
이들 모두 커널에서 자동으로 하드웨어를 탐색하여 메모리에 올려놓은 것들입니다.
매번 부팅할때 마다, 새로운 내용으로 갱신되기 때문에, 백업해봐야 의미도 없는 것들입니다.
이 위치들은 반드시 기억하세요. chroot하실 때, 이것들은 바인딩해야 합니다.

chroot라는 것은, change root의 약자로, 루트디렉토리를 새로이 설정하는 것입니다.
물론 임시로 말이죠.
그러면, 그 프로세스의 하위프로세스들은 chroot한 디렉토리를 /로 인식하게 됩니다.
예를 들어 GRUB이 망가져서 부트로더를 다시 설치해야 한다면,
우분투 ISO파일이나, CD롬으로 사용해보기로 부팅하신 후,
아래 처럼 chroot하시고, 일련의 명령을 사용하시면 됩니다.

[code:377uyuuc]
mkdir root
sudo mount /dev/sda1 root
sudo mount -B /proc root/proc
sudo mount -B /sys root/sys
sudo mount -B /dev root/dev

#주의 마운트 순서에서 /dev, /dev/pts순서를 지키고,

언마운트시에는 /dev/pts, /dev순서를 지켜야 합니다.

sudo mount -B root/{dev/pts,dev,sys,proc}
sudo chroot

#하고 싶은 작업들
grub-install /dev/sda --boot-directory=/boot
nano /boot/grub/custom.cfg
nano /etc/default/grub
update-grub
exit

sudo umount /dev/pts /dev /sys /proc
sudo umount /dev/sda1
[/code:377uyuuc]

이것 뿐이 아니라, 나만의 리눅스 라이브 시디 이미지를 만들고 싶을 때는,
먼저, debootstrap으로 최소의 리눅스 환경을 구축하고,
해당 디렉토리에 이런식으로 chroot해서, sudo apt-get install 등의 명령으로 프로그램들을 설치해놓고,
해당 디스크를 언마운트하기 전에, 디렉토리의 내용을 squashfs 등으로 저장하고,
이후, grub이나 iso리눅스 부트로더를 시디이미지에 심으면 됩니다.