- NAS 백업은 몇 년째 알아서 쌓이고 있었지만, 한 번도 복구해 본 적이 없었습니다.
- 빈 폴더를 만들어 블로그를 되살려보니 DB와 경로, 권한에서 차례로 막혔습니다.
- 연습 뒤에 남은 건 수치가 아니라 복구 순서 문서와 분기 한 번의 연습 날짜였습니다.
NAS를 들이고 나서 제일 마음에 들었던 건 백업이 알아서 쌓인다는 점이었어요. 스냅샷은 정해진 시각에 돌고, 하이퍼백업은 밤사이 조용히 끝나 있고, 책상 아래 외장 디스크에도 한 벌이 더 있습니다. 관리 화면을 열면 날짜가 줄줄이 붙은 목록이 보이는데, 그걸 보고 있으면 대비는 해뒀다는 기분이 듭니다.
그런데 지난 편에서 웹루트를 정리하다가 이상한 지점을 만났어요. 잘못 지운 게 있으면 백업에서 꺼내면 된다고 생각하고 있었는데, 정작 백업에서 무언가를 꺼내본 기억이 없었습니다. 몇 년째 상자만 차곡차곡 쌓아두고 한 번도 열어보지 않은 셈이었어요. 그래서 이번 편은 그 상자를 실제로 열어본 기록입니다.
백업이 있다는 것과 복구가 된다는 건 같은 말일까요?
저는 오랫동안 이 둘을 같은 말로 여겼어요. 백업 작업이 성공했다는 알림이 오면 그날 할 일은 끝났다고 봤습니다. 그런데 백업 성공은 복사가 끝났다는 뜻이지, 되살릴 수 있다는 보장은 아니에요. 08편에서 자동화가 조용히 멈춘 걸 한참 뒤에 알아챘을 때와 구조가 똑같습니다. 확인하는 장치가 없으면 잘 되고 있다는 느낌만 남거든요.
확인해 본 적 없는 백업은 백업이라기보다 백업했다는 기분에 가깝습니다. 문제는 그 기분이 깨지는 시점이에요. 진짜로 무언가 날아간 날, 그날 처음으로 백업을 열어보게 됩니다. 시간은 없고 참고할 메모도 없는 상태에서, 처음 해보는 작업을 가장 나쁜 조건에서 하게 되는 거예요.
그래서 급할 게 하나도 없는 평일 저녁에 미리 해보기로 했습니다. 운영 중인 폴더를 건드리는 게 아니라, 아무것도 없는 빈 폴더를 하나 만들어 놓고 거기에 되살려보는 연습이에요. 실패해도 잃는 게 없으니 마음 편히 틀릴 수 있어요.
빈 폴더에 되살려보는 연습은 어떻게 해봤을까요?
대상은 이 블로그로 정했어요. 워드프레스는 파일 한 덩어리와 데이터베이스 한 덩어리로 되어 있어서 연습용으로 적당했습니다. 규칙은 딱 하나만 뒀어요. 원본 폴더는 절대 쳐다보지 않기. 백업본과 제가 적어둔 메모만 가지고 처음부터 다시 세워보는 겁니다. 원본을 열어보는 순간 연습이 아니라 그냥 복사가 되니까요.
시작은 시시했습니다. 빈 폴더를 만들고, 백업에서 파일 뭉치를 풀어놓고, 웹서버 설정에서 그 폴더를 바라보게 했어요. 여기까지는 십오 분도 안 걸렸습니다. 이 정도면 오늘 안에 끝나겠다 싶었는데, 주소창에 넣고 열어본 첫 화면이 하얗게 비어 있었어요.
그 흰 화면 앞에서 한참을 앉아 있었습니다. 이상한 건, 그 순간 제가 무엇을 확인해야 하는지조차 몰랐다는 점이에요. 로그를 어디서 보는지, 뭐부터 의심해야 하는지 감이 없었습니다. 몇 년을 굴려온 서버인데도 세우는 일은 처음이었던 거예요. 평소에는 이미 돌아가고 있는 걸 고치기만 했으니까요.
연습하다 막힌 지점은 어디였을까요?
결국 그날 저녁 내내 걸린 곳은 네 군데였어요. 하나씩 적어두면 이렇습니다.
- 무엇을 백업하고 있는지 정확히 몰랐어요. 데이터베이스는 폴더째 복사한다고 살아나지 않습니다.
- 복구 순서를 몰랐어요. 파일과 DB 중 무엇을 먼저 넣어야 하는지부터 헷갈렸습니다.
- 설정 파일 안의 경로와 호스트가 여전히 원래 환경을 가리키고 있었어요.
- 권한과 소유자가 틀어져서 웹서버가 자기 파일을 못 읽었습니다.
가장 뼈아팠던 건 첫 번째였어요. 저는 데이터베이스 폴더까지 백업 대상에 들어가 있으니 당연히 글도 같이 저장되고 있다고 믿었습니다. 그런데 돌아가는 중인 DB를 파일째 복사한 사본은 그대로 붙여넣는다고 열리지 않아요. 되살릴 수 있는 형태로 따로 받아둬야 하는 물건이었습니다. 이걸 사고 당일에 알았다면 어땠을지 생각하면 아찔합니다.
설정 파일 문제는 성격이 좀 달랐어요. 파일도 DB도 다 들어갔는데 화면이 계속 원래 주소로 튕겨 나갔습니다. 안을 들여다보니 접속 주소와 호스트 값이 예전 환경을 가리키고 있었어요. 백업은 그때 그 상태를 그대로 담아둔 것이라, 다른 자리에 풀어놓으면 주소만 옛날을 기억하고 있는 상태가 되더라고요. 참고로 이런 값들은 글에 옮길 때 전부 xxxx로 가려뒀습니다.
마지막 권한 문제는 증상이 제일 얄궂었어요. 파일은 분명히 그 자리에 있는데 웹서버는 없다고 답합니다. 눈에는 보이는데 프로그램은 못 읽는 상태라, 파일이 없는 줄 알고 한참 엉뚱한 데를 뒤졌어요. 백업이 파일 내용은 지켜줘도 누구 것인지까지 그대로 돌려주지는 않는다는 걸 그때 알았습니다.
복구해 본 적 없는 백업은 아직 백업이 아니었습니다.쌓이는 건 자동이지만, 되돌아가는 건 한 번은 직접 해봐야 확인되는 일이었어요.
복구에 몇 시간이 걸린다고 말할 수 있나요?
연습을 하면서 시계를 켜뒀어요. 파일 푸는 데 얼마, DB 넣는 데 얼마, 헤맨 시간이 얼마인지 대충이라도 적어뒀습니다. 결과는 예상보다 훨씬 길었어요. 넉넉히 한 시간이면 되겠지 싶었는데, 첫 화면이 제대로 뜨기까지 저녁 시간 대부분을 썼습니다.
중요한 건 그 숫자가 정확한지가 아니라, 처음으로 숫자가 생겼다는 것이었어요. 그전까지 장애가 나면 얼마나 걸리냐는 질문에 저는 대답을 못 했습니다. 백업이 있으니 금방 되겠지, 정도였죠. 이제는 헤맨 시간을 포함해 대략 어느 정도라고 말할 수 있고, 그러면 어느 시간대에 사고가 나면 곤란한지도 같이 계산이 됩니다.
두 번째로 해봤을 때는 시간이 눈에 띄게 줄었어요. 실력이 늘어서가 아니라 순서를 알고 있어서입니다. 어디서 막히는지 알면 그 앞에서 미리 준비하게 되거든요. 복구가 오래 걸리는 이유의 절반은 작업 자체가 아니라 헤매는 시간이었습니다.
연습이 끝난 뒤에 무엇을 바꿨을까요?
거창한 시스템을 새로 만들지는 않았어요. 대신 네 가지를 손봤습니다. 전부 그날 헤맨 자리에서 그대로 나온 것들이에요.
- 복구 순서를 문서로 적어뒀어요. 급할 때 읽을 것이라 문장을 짧게 끊어 썼습니다.
- 데이터베이스는 파일 복사에 기대지 않고 되살릴 수 있는 형태로 따로 받게 바꿨어요.
- 복구가 끝났다고 판단할 확인 항목 세 개를 미리 정해뒀습니다.
- 분기에 한 번, 달력에 연습 날짜를 잡아뒀어요.
확인 항목을 정해둔 게 생각보다 유용했어요. 예전에는 화면이 뜨면 됐다고 여겼는데, 첫 화면만 멀쩡하고 이미지가 안 나오거나 관리 화면에 못 들어가는 경우가 있었습니다. 그래서 첫 화면, 글 하나 열기, 관리자 로그인 세 가지를 통과해야 복구된 것으로 치기로 했어요.
연습 날짜를 달력에 박아둔 건 저를 못 믿어서예요. 마음먹기로 하는 일은 대체로 안 하게 되더라고요. 대신 부담을 줄이려고 범위를 좁혔습니다. 전체를 다 되살리는 게 아니라 빈 폴더에 하나만 세워보는 것으로요. 한 시간 남짓이면 끝나는 크기로 만들어두니 실제로 하게 됩니다.
백업의 목적은 파일을 많이 모으는 게 아니라 원래 상태로 돌아가는 것이라고 생각해요. 그렇다면 돌아가 본 적이 없는 백업은 아직 절반만 끝난 셈입니다. 저는 이번에 그 나머지 절반을 처음 해봤고, 다행히 사고가 나기 전이었어요. 이 서버로 뭔가를 계속 돌릴 생각이라면 순서상 먼저였던 일 같습니다.
- 백업 성공 알림은 복구된다는 보장이 아니었어요. 확인은 따로 필요합니다.
- 데이터베이스는 폴더 복사가 아니라 따로 받아둬야 살아나는 물건이었어요.
- 복구 시간은 한 번 재보기 전까지 그냥 짐작이었고, 재보니 훨씬 길었습니다.
같이 보면 좋은 글
11편에서는 혼자 쓰는 NAS인데 계정과 접근 통로가 왜 이렇게 많아졌는지 훑어본 이야기를 쓰려고 해요. 예전에 만들고 잊은 계정, 테스트한다고 열어둔 통로까지 한 줄씩 세어보면서 무엇을 줄이고 무엇을 남겼는지 정리해 보겠습니다.