우리는 데비안 서버에서 모든 것을 백업하고 싶습니다. 데비안 서버는 종료하지 않고 세계 반대편 (리 노드에서 호스팅)에서 원격으로 실행됩니다.
이 시스템은 간단한 nginx 설정으로 쉘, 이메일, XMPP / prosody 및 웹을 실행합니다.
우리는 안전을 위해 그와 관련된 파일을 백업하고 싶습니다. 예를 들어, 사용자가 홈 디렉토리에 저장 한 파일입니다.
매번 / etc 파일마다 기존 설정 wrt를 정확하게 복사 할 필요는 없습니다. 대신, 우리가 처음부터 백업을 수행하는 이유는 새로운 설정으로 이동할 수 있기 때문입니다 (데비안의 최신 버전은 여전히 Linode에 있습니다).
Linode가 백업 서비스를 제공한다는 것을 알았습니다. 그러나 장기적으로는 우리 자신의 백업이 필요합니다.
이 질문이 존재하는 이유는 과거에 백업을 시도했을 때 다음 두 가지 실수 중 하나를 계속했기 때문입니다.
- “확인, 복사 만하면
/
됩니다.”로 이동 한 다음 복사 할 드라이브가 / media / backup 아래에 마운트되어 있고 재귀 적으로 복사되는 [obv] 때문에 이상한 무한 루프에 빠졌습니다. 우리가 rsync 또는 이와 유사한 것을 통해 백업 할 것이기 때문에 여기에서 적용 할 수없는 특정 문제] 또는 / proc 또는 / var 또는 “매일 변경되는 로그를 유지하려고하는 것과 같은 어떤”살아있는 “복사물을 복사하려고 시도했습니다. 또는 - 나는 “좋아, 우리가 필요한 것의 최소한도를 잡을 것이다. 흠, 모든 사람의 홈 디렉토리 및 웹 서버 디렉토리 (모두 아래에 있음
/var
)를 복사/etc
하고 / var / 아래에있는 모든 오래된 메일을 챙기자. vmail “을 선택한 다음 파일 권한 또는 타임 스탬프를 변경했거나 (이번에는 유닉스 파일을 FAT 드라이브에 백업하지 않도록해야 함) 무언가를 잊어 버렸습니다 (“오, 쏴, / usr / 다른 곳에 저장 한 적이없는 로컬 / 빈을 가져 와서 잊어 버렸습니다. “).
따라서 전체 드라이브를 똑바로 복사하면 함정이 발생하고 디렉토리를 선택적으로 복사하면 함정이 발생합니다. 올바른 방법을 알고 싶습니다.
서버 결함 질문 전체 백업 시스템에 무엇이 필요합니까? 철학과 모범 사례를 다루지 만 다음과 같은 구체적인 내용을 찾고 있습니다.
- 복사해야 할 디렉토리와 제외 할 디렉토리 (현재 실행 중이며 위키, XMPP 채팅, 이메일을 제공하는 시스템이므로 복사 작업이 실행되는 동안 새 메시지가 수신 됨)
- 타임 스탬프 및 소유자 및 그룹과 같은 어떤 파일 속성을 제시해야하며 어떻게해야합니까? ← 나는이 질문의 절반을 나 자신에게 대답 할 수
rsync -HXaz
있다고 생각한다.-z
OBV는 정말 “나는 무엇을 보존 할”입니다 질문에 관련이없는
을 사용하는 것과 같이 백업에 대한 많은 조언 dd
은 드라이브가 마운트 해제되어 있고 사용 중이 아니라고 가정합니다. 그러나 나는 (아래 / 나는 우리가 확실히 알고 VAR 물건의 일부 그러나 같은 / proc 디렉토리 이하의 / var 서브 디렉토리의 일부 디렉토리 “살아있는”제외 안하고 할 및 / 마운트 유지하기 위해 필요)? 이 상황에서 고려해야 할 다른 사항이 있습니까? 그런 다음 rsync와 함께 많은 --exclude
플래그를 사용하여 스너프 할 수 있다고 생각 합니다.
아니면 더 나은 아이디어, 특히 FOSS 친화적 아이디어가 있습니까?
답변
따라서 모든 불쾌한 실수없이 모든 드라이브를 백업하고 모든 / proc 및 기타 임시 폴더를 필터링하고 싶습니까?
옵션은 다음과 같이 파일 시스템 내의 다른 폴더에 루트 폴더를 마운트하는 것입니다.
$ cd /mnt
$ mkdir drive
$ mount --bind / drive
이렇게하면 / proc 또는 / sys 폴더와 같이 드라이브에 임시로 간주되지 않는 모든 파일이 제공됩니다.
이제 루트 폴더를 깨끗하게 볼 수 있으므로 표준 cp
또는을 사용하여 루트 폴더를 백업 드라이브에 복사하면됩니다 rsync
. 다음과 같은 내용이 있습니다.
cp -R /mnt/drive /mnt/backupdrive
이렇게하면 언급 된 문제가 모두 해결됩니다.
- 백업 디스크가 드라이브 내에 마운트되어 있지 않기 때문에 재귀에 빠지지 않습니다 (관점).
- 중요한 파일을 놓치지 마십시오. 모든 파일을 가져 오기 때문에
참조 : man mount (8)
답변
리눅스에서는 모든 것이 파일입니다. rsync를 통해 가능하지만 알아 두어야 할 것이 있습니다.
특히 데이터베이스의 경우 복제를 먼저 고려해야합니다. 또한 주 서버 앞에 프록시 /로드 밸런서를 설정하는 것이 좋습니다. 따라서 전환 중에 주 서버와 미러 서버를 쉽게 전환 할 수 있습니다.
하드웨어 수준에서 가장 좋은 상황은 같은 수의 이더넷 포트, 동일한 hdd 레이아웃 등을 가진 다른쪽에 미러와 같은 서버를 두는 것입니다. 다른 것은 시스템 구성 변경이 필요함을 의미합니다.
즉, 두 개의 eth 포트가있는 경우 네트워크 구성, 방화벽 등이 두 서버의 인터페이스 이름과 일치하는지 확인하고 다른 경우 rsync 후 구성을 변경하거나 두 번째에서 장치 이름을 변경해야합니다 (대상) 서버.
파티션 레이아웃과 동일합니다. 주 서버에서와 동일한 파티션을 만들어야하지만 처음부터 새로 만들면 다른 UUID가 생겨 fstab, grub, mdadm (소프트 레이드가 관련된 경우) 등을 변경해야합니다. .
그러나 데이터베이스와 같이 잘못 될 수있는 많은 것들이 있습니다. 이는 rsync를 수행하기 전에 이전에 중지하지 않으면 일관성이 없을 수 있습니다.
가장 좋은 전략은 먼저 기본 서버의 구성에 맞게 하드웨어 및 파일 시스템 (파티션)을 준비하는 것입니다. 그런 다음 중간 시스템을 통해 빈 패리티 턴을 마운트하십시오 (예 : ssh-server가 임시로 설치된 라이브 CD). 빈 / proc, / dev, / sys를 만든 다음 나머지를 rsync합니다.
rsync -avz -H --delete /etc /bin (...and so on) destserver:/mnt/yourrootfs/
그런 다음 장치에 grub을 설치하고 구성 작업을 수행하여 부팅 가능하게 만들고 네트워크 구성, fstab 및 앞에서 언급 한 기타 사항을 변경해야합니다.
새로운 시스템 (기본 서버에서 사용중인 것과 동일한 버전)을 설치 한 다음 전원을 끄고 다른 임시 시스템 (라이브 CD와 같은)을 통해 마운트 한 다음 / proc, / rsync를 사용하는 sys, / dev 및 / boot
그러나 일반적인 아이디어 일뿐입니다. 이 서버에 실제로있는 구성, 구성, 네트워크 및 하드웨어 설정에 따라 상황이 복잡해질 수 있습니다. 그리고 하루가 끝나면 눈에 띄는 가동 중지 시간 없이는 실제로 어려울 수 있습니다.
답변
실제로 원하는 것은 복원입니다. 무엇을 하든지 정기적으로 테스트를 복원해야합니다.
Linode에는 백업 서비스가 있습니다. 스냅 샷은 미리 정의 된 제한된 일정 또는 API를 사용하여 만들 수 있습니다.
스냅 샷 기반 백업의 장점은 복사 중에 데이터가 변경되지 않으므로 정확한 시점을 제공한다는 것입니다. 스냅 샷은이 경우 새로운 Linode 인 다른 호스트로 쉽게 복원 할 수 있습니다.
답변
소규모 가상 사설 서버에 BackupPC를 사용하고 있습니다. BackupPC는 후드에서 rsync를 사용할 수 있으며 전체 및 증분 백업을 지원합니다. 그것을보고 그것이 당신의 요구 사항을 충족시킬 것인지 확인하십시오.
답변
ZFS에서 시스템을 실행하십시오. 그런 다음 다음과 유사한 것을 사용하여 즉각적인 원자 스냅 샷을 만들 수 있습니다.
# zfs snap -r tank@name-of-backup
tank
ZFS 풀의 이름은 어디에 있습니까 ? 이 스냅 샷은 파일 시스템 및 모든 하위 파일 시스템의 즉각적인 순간 스냅 샷입니다.
스냅 샷을 만든 후에는 사용하여 다른 호스트로 전송할 수 있습니다 zfs send
와 ssh
.
답변
내 의견 그것은 내부 리눅스 명령으로 서버를 실행하는 곳과 장소에 따라 다르며, 완전한 데이터와 라이브러리를 모방 / 파이프해야합니다. vmware에서 실행 중이고 올바르게 구성된 경우 실시간 마이그레이션을 제공합니다. 그렇지 않으면 타사 도구를 사용해야합니다. 이것이 도움이되기를 바랍니다. 추가 참조 라이브 서버를 어떻게 백업합니까?
Rsync는 서버간에 데이터를 동기화하는 좋은 명령입니다.
답변
체크리스트가 불완전하거나 단순히 간과 된 것으로 인해 누락 된 비트에 의존 할 필요가없고 목록에서 하나의 항목을 누락 할 필요가없는 2 가지 솔루션이 있습니다.
먼저, 기본 하드웨어 플랫폼을 좀 더 제어 할 수있는 플랫폼으로 이것을 옮기면 서버가 실행되는 동안 모든 파일의 디스크 스냅 샷을 만들 수 있습니다. 예를 들어 AWS에서는 EBS 디스크를 스냅 샷 할 수 있으며 나중에 다른 스냅 샷을 만들 때 차이를 지불 할 수도 있습니다.
둘째, Ansible과 같은 구성 관리 시스템을 사용하여 전체 서버 설정을 스크립팅하는 것이 좋습니다. 이것은 것입니다
-
소스 제어에서 구성한 모든 것을 문서화
-
스크립트가 최신인지 확인하기 위해 백업 또는 베어 메탈에서 서버 재생성을 테스트 할 수 있습니다.
-
새로운 운영 체제에서 일반적으로 약간의 변경만으로 스크립트를 다시 실행할 수 있습니다.