저는 uClibc
x86 장치에서 작은 임베디드 시스템을 실행하고 있습니다. busybox
저는 initramfs를 사용하고 있지만 ext3
사용자 정의 작성된 C++ 응용 프로그램에서 생성된 영구 측정 로깅 데이터를 저장하는 데 사용하는 IDE 모드의 컴팩트 플래시 장치에 사용자 정의 디렉터리도 설치했습니다. 파일 시스템을 선택한 ext3
이유는 IDE 모드에서 CF 드라이브를 사용할 때 전원 손실을 방지하기 위해 읽은 여러 책에서 권장되었기 때문입니다(임베디드 리눅스 시스템 구축저자: 카림 야그몰(Karim Yagmol)임베디드 리눅스 시작하기저자: 크리스토퍼 할리넌). 이는 특히 중요하며 데이터가 중요합니다.
그러나 이전 질문에 대한 일부 의견으로 인해파일 쓰기 중 정전이 발생하는 경우 손상된 ext3 파일을 복구하는 방법에 대해 혼란스러워함실제로 파일 시스템은 정전으로 인한 데이터 손상에 대한 보안을 제공하지 않는 것으로 보입니다. 그래서 나는 알고 싶다.
ext3
실제로 이 설정에 가장 적합한 선택 입니까 ?- 디스크 쓰기 작업 중 정전이 발생하면 주기적으로 파일에 추가하는 데이터 부분만 손상됩니까?모두문서?
- 데이터는아니요전원이 꺼진 상태에서 글을 쓰는 것이 완전히 안전한가요? 특히 내
initramfs.cpio
파일이 손상될 위험이 있나요? - 데이터를 보호하기 위해 내 애플리케이션 코드에서 사용할 수 있는 방법이 있습니까(예: 추가 파티션을 만들고 내 데이터를 미러에 기록하여 항상 2개의 복사본이 있도록 함) - 내 애플리케이션 문제에서는 속도가 실제가 아니므로 비용이 많이 드는 복사 작업 허용됩니다.
나는 이 관련 질문에 대한 답변을 보고 읽었습니다.정전 후에도 로그 파일 시스템이 손상되지 않는다고 보장할 수 있습니까?, 그러나 그것은 나를 혼란스럽게 하는 몇 가지 사항을 다루지 않습니다.
질문을 많이 한다는 것은 알지만, 많은 자료를 읽었음에도 불구하고 정전이 발생할 경우 내 데이터에 대한 위험을 근본적으로 이해하지 못하는 것 같습니다.
답변1
보안과 관련된 모든 것과 마찬가지로 보장은 없지만 위험(및 비용)과 확률의 균형을 맞춰야 합니다. 경험에 비추어 말하면(나는 암흑 시대부터 수십 개의 *nix boxen을 실행해 왔습니다) 전원으로 인한 파일 시스템 손상을 실제로 경험한 적이 없습니다.
이러한 시스템 중 일부는 저널링이 아닌 파일 시스템(보통 ufs 및 ext2)에서도 실행됩니다. 일부는 내장되어 있고 일부는 Nokia N900과 같은 휴대폰이므로 좋은 전원 공급 장치가 보장되지 않습니다.
이는 파일 시스템 손상이 발생하지 않는다는 의미가 아니라 발생 가능성이 충분히 낮아서 걱정할 필요가 없다는 의미입니다. 그럼에도 불구하고 베팅을 헤지하지 않을 이유가 없습니다.
문자 그대로의 질문에 답하려면:
- 적어도 당신이 인용한 첫 번째 책은 이전에 작성된 것입니다
ext4
. 저자가 사용을 제안했을 때 실제로는 "불안정하거나 저널링이 아닌 파일 시스템을 사용하지 마십시오 "라고ext3
말하고 있었습니다 .ext2
한 번 시도해 보세요ext4
. 매우 완성도가 높으며 플래시 장치의 기대 수명을 연장할 수 있는 비회전 디스크에 대한 몇 가지 좋은 옵션이 있습니다. - 전체 파일이 아닌 마지막 한두 블록이 손실될 가능성이 높습니다. 저널링 파일 시스템의 경우 이것이 유일한 손실입니다. 일부 오류 시나리오에서는 파일 전체에 무작위 데이터가 흩어져 있는 것을 볼 수 있지만 이는 마이크로운석이 내장된 장치를 직접 강타하는 것처럼 보입니다.
- 2를 참조하세요. 100.00% 안전한 것은 없습니다.
두 번째 IDE 채널이 있는 경우 여기에 두 번째 CF 카드를 삽입하고 파일 시스템을 정기적으로 백업하십시오. 이를 수행하는 방법에는 여러 가지가 있습니다:
rsync
, 또는 (소프트웨어 RAID) 장치를 사용하는 경우(때때로 두 번째 드라이브를 추가하고 동기화한 다음 제거합니다. 두 장치가 모두 항상 활성화되어 있으면 동일한 드라이브에 노출됩니다.)cp
dump
파일 시스템 손상 등의 위험이 있습니다. LVM을 사용하면 스냅샷을 찍을 수도 있습니다. 데이터 수집 임베디드 장치의 경우 두 번째 파일 시스템을 마운트하고 데이터 로그를 복사한 다음 즉시 마운트 해제하는 임시 솔루션만 사용합니다. 장치에 좋은 부팅 이미지가 있는지 여부가 걱정되는 경우 부팅 관리자의 두 번째 복사본과 필요한 모든 부팅 이미지를 두 번째 장치에 붙여넣고 두 CF 카드 중 하나에서 부팅하도록 컴퓨터를 구성합니다.dd
md(4)
나는 두 번째 사본을 믿지 않을 것이다동일한저장 장치는 안정적인 파일 시스템보다 오류가 발생할 가능성이 더 높기 때문입니다.많은지금까지의 경험에 따르면(직장에서 금요일 오후에 디스크 고장 가능성이 놀라울 정도로 높다는 것은 농담입니다. 한동안은 거의 매주 행사였습니다). 디스크가 회전하는지 여부에 관계없이 실패할 수 있습니다. 따라서 가능하다면 계란을 두 개의 바구니에 담아 데이터를 더 잘 보호할 수 있습니다.
데이터가 특히 민감한 경우 주기적으로 장치에 액세스하고 백업 CF를 새 것으로 교체한 다음 재부팅하여
fsck
모든 파일 시스템을 완전히 활용했습니다.
답변2
파일 시스템 구현은 갑작스러운 정전 시 수행할 수 있는 작업이 제한되어 있는 것 같습니다. 결국 파일 시스템은 실제로 하드웨어와 상호 작용하므로 데이터/명령을 하드웨어에 보내는 시간과 시간 사이에 데이터/명령이 전송되는 사이에 무슨 일이 발생합니까? 응답을 얻는 것은 통제할 수 없는 일입니다. 이 문제를 해결할 수 있는 파일 시스템이 있다면 들어본 적이 있을 것입니다.
따라서 중요한 데이터를 보호하기 위한 전략은 다음을 기반으로 한 결정을 통해 가장 큰 이점을 얻을 수 있습니다.하드웨어예를 들어 무정전 전원 공급 장치를 사용하여 수준을 유지합니다. 귀하의 경우에는 이것이 가능하지 않을 수도 있습니다.
성능은 큰 문제가 아니라고 했으니 현명하게 사용하세요fsync()
.
디스크 쓰기 작업 중 정전이 발생하면 파일에 주기적으로 추가하는 데이터의 일부만 손상됩니까, 아니면 전체 파일이 손상됩니까?
나는 수년간 개인용 인터넷 서버와 트래픽이 중간 이하인 인터넷 서버에서 extN 파일 시스템을 사용해 왔으며 Alexios처럼 정전으로 인한 피해를 많이 본 적이 없습니다. 그 중 하나는 실제로 다음과 같습니다). 더 심각한 문제는 하드웨어 오류로 인한 손상입니다. 다른 파일 시스템에서는 이를 어느 정도 처리할 수 있지만 이는 근본적으로 제어 범위를 벗어나며 이를 방지하기 위해 할 수 있는 방법이 없습니다.
가끔 파일이 손실되거나 크기가 0으로 잘리는 경우가 있습니다. 나는 이것이 어떻게든 복원될 가능성이 높다고 생각합니다. 백업되었기 때문에 나에게는 필요하지 않습니다. 대부분의 경우 문제가 발생하면 fsck
해결되는 것 같습니다.
정전 중에 기록되지 않은 데이터는 완전히 안전합니까? 특히, 내 initramfs.cpio 파일도 손상될 위험이 있습니까?
정전으로 인해 발생할 수 있는 전원 서지로 인한 플래시 스토리지 손상의 경우를 제외하면 정전만으로 인한 위험은 실제로 매우 낮다고 생각합니다. 저는 이에 대해 경험해 본 적이 없지만 이에 대해 생각해 보시고 알고 계시기를 바랍니다. 이것에 대해 연구했습니다.
데이터를 보호하기 위해 애플리케이션 코드에서 사용할 수 있는 방법이 있습니까?
그것을 반복할 가치가 있다fsync(). C++/iostream 객체에는 이 메서드가 없지만(::flush 및 ::sync는 fsync가 아님) 필요한 것은 파일 설명자뿐입니다.
답변3
ZFS는 확실히 파일 시스템이며 아마도 설계상 손상으로부터 보호되는 유일한 시스템일 것입니다. 그러나 uClinux 기반 플랫폼에 대한 ZFS 구현(퓨즈 기반 또는 기본)의 유용성은 확실하지 않습니다.
답변4
정전으로 인해 파일 시스템이 거의 손상되지 않도록 하는 데 큰 도움이 되는 상용 파일 시스템이 하나 이상 있으며, 손실될 수 있는 유일한 데이터는 정전 시 추가된 데이터입니다.
단점은 가격이 매우 비싸다는 것이지만 장점은 훌륭한 지원을 제공한다는 것입니다. 비용 때문에 실제로는 고위험 및/또는 대량 제품에 대한 옵션일 뿐입니다. 예를 들어, 석유 및 가스 생산에 사용되는 중요한 내장 장비는 잦은 정전과 같은 "불확실한" 작동 조건에서 시스템 무결성을 보장해야 합니다.
확인하다데이터라이트(회사)및/또는 제품"릴라이언스 니트로". (Reliance는 그들의 유산이며 안전하지만 그다지 효과적이지는 않은 솔루션입니다.릴라이언스 니트로). 이 시스템을 사용할 돈이 없더라도 시스템 작동 방식과 시스템이 ext3 및 ext4 등에 비해 더 안정적인 이유를 설명하는 정말 좋은 기사가 있습니다.
광고처럼 들리셨다면 죄송합니다. 몇 가지 옵션을 알려드리고 싶었습니다.