[질문] FreeBSD: 포맷한 디스크에서 이전 데이터 복구하기

우수한의 이미지

정말 죽을 맛이군요.
FreeBSD를 업그레이드하면서, DB를 백업하고 복원했는데
희한하게도 그중 하나의 DB가 빠져버렸습니다. :shock:
이거 어떻게 복구가 가능한지 모르겠군요.

자세한 내용은 다음과 같습니다.
프비4.7에서 쓰던 SCSI 하드를 포맷하고 새로 5.2R을 깔았습니다.
파티션도 이전과 다르게 새로 했습니다.
잘 기억은 안나지만, 이전 파티션은 대략

    / (100M) swap (512M)
    /var (4G)
    /home (6G)
    /usr (4G)
    /backup (4G)
였던 것 같습니다. (계산이 안맞는데.... ) 새로 5.2를 깔면서 UFS2로 포맷해버렸고, 파티션은
    / (256M) swap (1G)
    /tmp (512M)
    /var (6G)
    /usr (9.4G)
로 바뀌었습니다.

찾고자 하는 문제의 파일은 이전의 /var 파티션, /backup 파티션 중에 들어있었습니다.
/backup 파티션에 존재할 경우,
지금 새 파티션의 /usr 사용량은 2G 미만이므로,
(물리적으로 디스크 안쪽에 배치된) 기존의 /backup 디렉토리에는
다른 데이터가 덧씌워지지 않았을 것이라고 추측하고 있습니다.

윈도우의 FinalData 같은 프로그램처럼
inode로 접근해서 파일을 복구하는 방법이 있을 것도 같은데요.
써보진 않았습니다만, ffrecover 같은 프로그램은 프비4.x버전에서만 작동하는 것 같구요.
현재 파티션이 UFS2로 바뀌어서 가능할지 모르겠습니다.
이전 파티션과 같이 새로 포맷하면 가능할 것도 같은데... 한번도 해본적이 없어서 겁부터 납니다.
관련업체에 문의하니 가능할 것 같다고 하는데,
비용이 너무 비싸고, 가동중인 서버를 하루이틀씩 중단시키는게 쉽지 않아서...

이런 일은 처음이군요. :cry:
정말 시스템 관리는 함부로 하는게 아니라며 뼈저리게 반성하고 있습니다.
고수님의 손길을 기다립니다.

혹시 이런 경우, 손해배상은 어떻게 하는지 경험있으신 분의 조언도 부탁합니다.

[/][/]
maddie의 이미지

헉,,,

힘없는자의 슬픔

cjh의 이미지

제가 예전에 써놓은 글인데 참고가 많이 될 겁니다.
저도 하도 오래되어서 방법을 까먹었습니다. :<

http://www.kr.freebsd.org/ml/hackers/2000/08/msg00009.shtml

저랑 비슷하게 레이블만 까먹은 거니까 gpart를 쓰실 필요는 없을테고, 위 메일에 있는 프로그램 빌드하셔서 레이블이 시작되는 위치를 알아낸 다음 그 정보를 바탕으로 disklabel을 재구성하시면 됩니다. 물론 disklabel이 복구되었다면 fsck -y를 꼭 해 주셔야 할 테고요, 그 때 파일 날라가면 어쩔 수 없습니다.

되든 안되는 일단 도전해 보는게 좋겠습니다.

--
익스펙토 페트로눔

우수한의 이미지

답변 감사합니다.
그런데... 지금 저는 파티션을 바꾸었을 뿐 아니라 포맷하고 5.2R을 깔아둔 상태입니다.
이전의 /backup (4G) 위치가 지금의 /usr (9G) 위치에 해당하고
지금의 /usr 는 2G만 사용하고 있으므로
아마도 /backup 쪽에 있던 데이터가 무사하지 않을까 추측하는 겁니다.
만약 UFS2 시스템이 남은 공간까지 사용해버렸다면 데이터복구는 불가능할테죠.
그러니 파티션 정보가 날아간 상태와는 조금 다르지 않을까 싶은데요.
가르쳐주신 링크의 내용을 읽었지만 잘 모르겠습니다. :oops:

그리고 ffsrecover는 5.x 버전에서 broken으로 나오던데요.
다른 컴퓨터의 FreeBSD에 4.x를 깔고, 문제의 디스크(UFS2)를 붙여도
제대로 작동할런지...

우수하지 않아요. '우수한'은 옛날 만화 CityHunter에서 따와서 쓰던 별명. ;-)

cjh의 이미지

용어에 혼동이 있는것 같은데 저는 PC파티션을 파티션이라 부르고 FreeBSD파티션을 레이블이라 불렀습니다. gpart는 PC파티션을 복구하는 프로그램이고, FreeBSD파티션=레이블을 복구하는건 메일에 있는 프로그램을 사용해야 경계 위치를 추적할 수 있습니다.

포맷을 겹쳐서 해도 사용하지 않았다면 해당 레이블은 약간 손상된 채로(왜냐하면 포맷 과정에서 슈퍼블럭 카피가 놓이니까요) 남아 있을 겁니다. 레이블 위치만 블럭 단위로 정확히 알 수 있다면 복구가 되죠.

ffsrecover가 안되어도 위 경우라면 거기 있는 프로그램 빌드해서 한번 돌려봐서 뭐가 나오는지 보셔야 겠습니다. 아마 새로 포맷한 거랑 이전 레이블이랑 위치가 둘 다 나올 테니 정말 잘 보고 나누셔야 겠네요.

그리고 4.x에서 만든 레이블을 복구하는 거니까 덮어쓴 포맷이 UFS2이든 아니든 간에(심지어 FAT로 포맷했다고 해도) 4.x에서 ffsrecover+레이블 탐지(메일에 들어있는) 시도하시면 됩니다. 복구할 레이블은 UFS1이니까요.

--
익스펙토 페트로눔

우수한의 이미지

파티션(레이블)을 헷갈려한건 아니구요. 레이블 정보만 날아갔을 뿐 아니라
거기에다 +"포맷", +"다른 데이터 쓰기"가 되었다는 얘길 하려고 한겁니다. :?

아, 그리고 "메일에 있는 프로그램"이란게... 메일 아래쪽에 씌어진 소스를 말씀하시는거였군요. 저는 ffrecover를 말씀하시는 건줄 알고.... :oops:

설명 감사합니다. 한번 삽질을 해봐야겠네요.

우수하지 않아요. '우수한'은 옛날 만화 CityHunter에서 따와서 쓰던 별명. ;-)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.