어떤 파일 시스템이 전원 손실로 인한 손상으로부터 데이터를 보호하기위한 최상의 보호 기능을 제공합니까?


9

나는 작은 실행하고 uClibcbusybox를 x86 장치 기반의 임베디드 시스템을. initramfs를 사용하고 있지만 ext3사용자 정의 작성된 c ++ 응용 프로그램으로 작성된 지속적인 측정 로깅 데이터를 저장하는 데 사용하는 IDE 모드의 소형 플래시 장치에 사용자 정의 디렉토리를 마운트합니다 . 필자는 ext3필자가 읽은 두 권의 책 ( Karim Yaghmour의 임베디드 리눅스 시스템 구축 및 Christopher Hallinan의 임베디드 리눅스 입문서) 에서 IDE 모드에서 CF 드라이브를 사용할 때 전력 손실을 방지하기 위해 권장 되는 파일 시스템을 선택했습니다 . 이것은 특히 중요하며 데이터는 중요합니다.

그러나 이전 질문의 일부 의견 때문에 파일 쓰기 중에 정전이 발생하면 손상된 ext3 파일을 복원하는 방법과 혼동 실제로이 파일 시스템은 전원으로 인한 데이터 손상에 대한 안전을 보장하지 않습니다 손실. 그래서 나는 알고 싶습니다

  1. ext3실제로 설정을위한 최선의 선택?
  2. 디스크 쓰기 작업 중 전원 손실이 파일에 추가하는 데이터의 일부만 손상 시키거나 전체 파일을 손상시킬 수 있습니까?
  3. 정전 시점에 기록 되지 않은 데이터는 완전히 안전합니까? 특히 내 initramfs.cpio파일도 손상 될 위험이 있습니까?
  4. 응용 프로그램 코드에서 데이터를 보호하기 위해 사용할 수있는 방법이 있습니까 (예 : 여분의 파티션을 만들고 데이터를 미러 이미지에 기록하여 항상 2 개의 복사본이있는 경우). 속도는 응용 프로그램에서 실제로 문제가되지 않으므로 값 비싼 복사 작업 허용됩니다.

이 관련 질문에 대한 답변을보고 읽었습니다. 저널링 파일 시스템은 정전 후 손상을 방지합니까? , 그러나 그것은 나를 혼란스럽게하는 것들 중 일부를 다루지 않습니다.

나는 많은 질문을하고 있다는 것을 알고 있지만 많은 자료를 읽음에도 불구하고 전력 손실시 데이터의 위험을 이해하지 못하는 근본적인 것으로 보인다.

답변:


11

보안과 관련된 모든 사항과 마찬가지로 보장은 없지만 위험 (및 비용)과 확률의 균형을 유지해야합니다. 경험을 통해 (어두운 이래로 수십 개의 * nix boxen을 실행 해 왔음), 나는 실제로 심각한 파일 시스템 손상으로 인한 적이 없었습니다.

이러한 머신 중 일부는 저널링되지 않은 파일 시스템 (일반적으로 ufs 및 ext2)에서도 실행되었습니다. 그중 일부는 내장되어 있었고 일부는 Nokia N900과 같은 휴대 전화였습니다. 따라서 우수한 전원 공급 장치가 전혀 보장되지 않았습니다.

파일 시스템 손상이 발생할 수있는 것은 아닙니다. 파일 시스템이 손상 될 가능성이 낮아 걱정할 필요가 없습니다. 그래도 베팅을 헤지 할 이유가 없습니다.

문자 그대로의 질문에 대한 답변 :

  1. 적어도 당신이 언급 한 첫 번째 책은 전에 쓰여졌 ext4습니다. 저자가을 사용할 것을 제안 할 때 ext3실제로는 '안정적이지 않거나 저널링되지 않은 파일 시스템을 사용하지 마십시오 ext2'). 시도해보십시오 ext4. 매우 성숙하고 회전하지 않는 디스크에 적합한 옵션이있어 플래시 장치의 수명을 연장 할 수 있습니다.
  2. 전체 파일이 아닌 마지막 블록을 잃을 가능성이 있습니다. 저널 파일 시스템을 사용하면 이것이 유일한 손실입니다. 파일 전체에 임의의 데이터가 뿌려지는 것을 볼 수있는 실패 시나리오가 있지만, 임베디드 장치를 통해 미세한 운석이 스매싱하는 것처럼 보입니다.
  3. 2를 참조하십시오. 100.00 % 안전은 없습니다.
  4. 두 번째 IDE 채널이있는 경우 두 번째 CF 카드를 넣고 파일 시스템의 백업을 주기적으로 수행하십시오. 이 작업을 수행 할 수있는 몇 가지 방법이 있습니다 : rsync, cp dump, dd, 심지어 사용하는 md(4)장치 (소프트웨어 RAID)을 (당신이 그것을 동기화하자, 때때로 두 번째 드라이브를 추가 한 후 제거 - 두 장치는 항상 살아 있다면, 그들은 같은 위험을 실행 파일 시스템 손상). LVM을 사용하면 스냅 샷을 얻을 수도 있습니다. 데이터 수집 임베디드 장치의 경우 두 번째 파일 시스템을 마운트하고 데이터 로그를 복사하여 즉시 마운트 해제하는 임시 솔루션입니다. 부팅 이미지가 좋은 장치가 걱정된다면, 두 번째 장치에 부팅 관리자 사본과 필요한 모든 부팅 이미지를 붙여 두 컴퓨터가 CF 카드에서 부팅되도록 구성하십시오.

    스토리지 장치는 안정적인 파일 시스템보다 자주 실패하기 때문에 동일한 장치 에서 두 번째 사본을 신뢰하지 않습니다 . 훨씬 더 자주, 지금까지 내 경험에 따르면 (작업시 금요일 오후 디스크 고장의 가능성이 매우 높음에 대해 절반의 농담이있었습니다. 그것은 거의 매주 거의 매주 일어난 사건이었습니다). 디스크가 회전하고 있는지 여부에 관계없이 실패 할 수 있습니다. 따라서 가능하면 계란을 두 개의 바구니에 보관하면 데이터를 더 잘 보호 할 수 있습니다.

    데이터가 특히 민감한 경우 정기적으로 장치를 방문하고 백업 CF를 새로 교체하고 재부팅하여 fsck모든 파일 시스템을 제대로 측정 할 수 있도록 재부팅 합니다.


+1, 그러나 복제는 기본 복사본과 동일한 문제로 어려움을 겪습니다. 두 개의 장치 (RAID 또는 상위 수준 유틸리티를 통해 장치) 동기화를 시작하고 전원이 꺼지면 (데이터에 지속적으로 추가되는 동안) 다시 쓰레기를 가져옵니다. 도움이 될 수있는 것은 때때로 장치 중 하나를 물리적으로 변경하고 오프라인 백업 양식을 제거하여 RAID1을 만드는 것입니다. 일관성을 유지하려면 (즉, 스냅 샷 만들기) FS를 제거하기 전에 정지해야합니다. XFS는이를 지원하는 파일 시스템 중 하나입니다.
peterph

과연. 내가 쓴 것처럼, 보장이 없습니다. 데이터를 쓸 때마다 손상 될 수 있습니다. electronics.stackexchange.com의 사람들은 수퍼 커패시터와 내장 감지 시스템이 전원이 꺼졌다는 알림을 받고 여전히 쓰기를 중단하기에 충분한 주스를 얻는 브라운 아웃 감지 기능을 사용하고 있습니다. 아마도. :) 잠재적 인 위험이 어느 정도라고 생각하는지, 그리고 문제를 해결하기 위해 지출 할 돈 / 노력의 양이 중요합니다 (다음 문제를 고려하기 시작하십시오).
Alexios

이 답변에 감사드립니다. 이것은 나를 위해 상당히 명확합니다.
수학자

4

갑작스런 전원 손실의 경우 파일 시스템 구현이 달성 할 수있는 것은 제한되어 있습니다. 결국 실제로 하드웨어와 인터페이스하고 있기 때문에 데이터 / 지침을 하드웨어에 보내는 시간과 하드웨어 사이에 발생하는 상황 응답이 제어 범위를 벗어났습니다. 이 문제를 우회 할 수있는 파일 시스템이 있다면 들어 보셨을 것입니다.

따라서 중요한 데이터를 보호하는 전략 은 무정전 전원 공급 장치를 사용하는 등 의 하드웨어 수준의 의사 결정에서 가장 큰 이점을 얻을 수 있습니다. 아마도 이것은 당신의 상황에서 그렇게 가능하지 않을 것입니다.

성능이 실제로 큰 문제는 아니므로을 신중하게 사용하십시오 fsync().

디스크 쓰기 작업 중 전원 손실이 파일에 추가하는 데이터의 일부만 손상 시키거나 전체 파일을 손상시킬 수 있습니까?

나는 extN 파일 시스템을 개인적으로 그리고 중간 규모의 트래픽 인터넷 서버에서 수년간 사용 해 왔으며 Alexios와 마찬가지로 정전으로 인한 많은 손상을 보지 못했습니다 (공평하지만 서버에는 UPS가 있으며 리콜 할 수 없습니다) 그들 중 하나는 실제로 그런 식으로 내려갑니다). 훨씬 더 심각한 문제는 다른 파일 시스템이 문제를 처리 할 수있는 하드웨어 장애로 인한 손상입니다. 그러나 이것은 근본적으로 제어 할 수 없으며이를 방지 할 수 없습니다.

때때로 파일이 손실되거나 크기가 0으로 잘리는 것을 보았습니다. 나는 이것이 어떻게 든 회복 될 수있는 좋은 기회가 있다고 생각한다. 이들이 백업 될 때 이것은 나에게 필요하지 않았습니다. 전혀 문제가 없다면 대부분 fsck그것을 처리하는 것 같습니다.

정전시 쓰여지지 않은 데이터는 완전히 안전합니까? 특히, initramfs.cpio 파일이 손상 될 위험이 있습니까?

플래시 스토리지의 종류는 정전에 수반되는 전원 서지로 인해 발생할 수있는 손상으로 인해 플래시 스토리지가 손상 될 수 있다는 점을 제외하고는 단지 정전으로 인한 위험이 실제로 낮다고 생각합니다. 이것을 연구했습니다.

데이터를 보호하기 위해 응용 프로그램 코드에서 사용할 수있는 방법이 있습니까?

fsync () 에 대한 요점을 반복 할 가치가 있습니다. C ++ / iostream 객체에는 이에 대한 방법이 없지만 (:: flush 및 :: sync는 fsync가 아님) 파일 디스크립터 만 있으면됩니다.


이 답변에 감사드립니다. sync옵션 을 통해 쓰여지는 파티션을 /etc/fstab파일에 마운트하면 동기식으로 쓰기가 수행된다는 것을 이해합니다. 이것은 파일 쓰기 코드가 반환되면 데이터가 실제로 디스크에 기록되었음을 의미한다고 가정합니다. 필자는 sync본질적 fsync(my_filedescriptor)으로 쓰기 후 호출하는 것과 동일 하다는 것을 이해했습니다 . 이것에 대한 나의 이해가 맞습니까?
수학자

@ mathematician1975 나는 그렇게 추측 할 것이다. 이것은 내가 연구 한 것이 아니다. IMO는 어쨌든 불편하지 않은 한 fsync()적절하다고 생각되는 지점에 던지면 어쨌든 해를 끼치 지 않으며 시스템을 더 강력하게 만듭니다 (예 : 동기화 설정없이 장치가 자연스럽게 장착되는 경우 등).
goldilocks

1

ZFS는 확실히 의도적으로 파일 시스템이며 손상을 방지합니다. 그러나 uClinux 기반 플랫폼에 대한 ZFS 구현 (퓨즈 기반 또는 기본)의 가용성에 대해서는 잘 모르겠습니다.


0

정전으로 인해 파일 시스템이 거의 손상되지 않도록하고 전원을 껐을 때 추가 된 데이터 만 손실 할 수 있도록하기 위해 엄청난 작업을 수행하는 상업용 파일 시스템이 하나 이상 있습니다.

단점은 비용이 매우 비싸다는 것입니다. 비용으로 인해 실제로 스테이크 및 / 또는 대량 제품에 대한 옵션 일뿐입니다. "불확실한"작동 조건 (예 : 빈번한 정전 등) 내에서 시스템 무결성을 보장해야하는 석유 및 가스 생산과 같은 중요한 내장 장비와 같습니다.

확인 DataLight (기업) 및 / 또는 제품 " 신뢰 NITRO을 ". (Reliance는 Reliance NITRO로 대체 된 기존의 안전하지만 매우 효과적인 솔루션은 아닙니다 ). 이 시스템을 사용할 돈이 없더라도 시스템 작동 방식, 예를 들어 ext3 및 ext4보다 신뢰성이 높은 이유를 설명하는 기사가 있습니다.

이것이 광고처럼 읽 히면 옵션을 지적하고 싶었습니다.


안녕하세요. 사이트에 오신 것을 환영합니다. 제품을 제안하려는 경우 i) 문제의 제품에 대한 링크를 제공하십시오. ii) 대안보다 왜 나은지 설명하십시오 (당신은 그것이 엄청난 일을한다고 주장하지만 왜 그것이 다른 것보다 더 좋은지는 설명하지 않습니다); iii) 회사와 제휴 관계를 맺고 있다면이를 명시 적으로 말하거나 스팸으로 고발해야합니다.
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.