끊어지지 않는 파일 시스템 (데이터 손실 허용)


9

이 문제와 관련하여 몇 가지 기존 주제가 있지만 내가 추구하는 것은 약간 다릅니다. 임베디드 Linux에 SD 카드가 있는데 전원 손실로 어려움을 겪고 있습니다. 어느 시점에서 하드웨어를 수정하고 올바르게 닫는 등의 작업을 수행 할 수 있습니다. 그러나 지금 당장은 전원 손실 없이도 파일 시스템을 찾고 싶습니다. 데이터 손실이 허용됩니다. 현재 쓰고있는 파일보다 더 많이 잃지 않는 것을 선호하지만 '마운트 할 수 없음', '이 10 분 동안 기다림 fsck'또는 '새로 만들 수 없음'에 직면하는 것보다 여전히 잃을 것입니다 이 inode로 인해 파일에 문제가 있습니다. ' 이 프로그램은 계속 진행되어야합니다!

나는 이것을 보장하기 위해 많은 노력을 기울이고 있습니다. 나는 산업 등급의 구성 요소를 사용하고 있으며 하드웨어 워치 독, 소프트웨어 워치 독, 내부, 외부, 프로그램 재시작, 데몬이 지속적으로 메모리, 파일 설명자 등을 검사하고 워치 독이 워치 독을보고 다른 워치 독이 감시합니다. ...하지만 SD 카드가 마운트되고 작동 할 수 있다고 보장 할 수 없습니까?

지금 가장 좋은 방법은 SD 카드에서 JFS를 사용하고 설치에 fsck 및 fsck.jfs를 포함시키는 것입니다. (램과 플래시를 먹는 600kb +를 추가하는 것은 좋지 않습니다.) 그리고 시작할 때마다 fsck를 실행하십시오 (부팅 시간이 많이 걸릴 수 있습니다. 다소 나쁩니다). 그래도 조금 슬픈 것 같습니다.

누구든지 더 나은 방법이나 더 나은 파일 시스템을 알고 있습니까?

업데이트 : e2fsprogs-libs (jfsutils에 대한 종속성)는 배포판에서 컴파일하기가 어려워 보입니다. ZFS를 살펴볼 것입니다. (배포판 고유하지 않습니다. 그리고 필요하지 않은 많은 일을하는 것 같습니다.)

UPDATE2 : 내 시스템 및 테스트에 대한 추가 정보 : SD 카드 스토리지는 보조 옵션 스토리지입니다. SD 카드는 2Gb-8Gb 산업용 등급 microSD입니다. SD 카드는 mount -t 명령으로 내 rc를 통해 마운트됩니다. "noatime"옵션이지만 "sync"옵션은 없습니다. 내 배포판은 3.10 커널과 1.21 busybox를 갖춘 맞춤형 아날로그 장치 맛 uClinux입니다. 내 기본 저장소는 jffs2가 포함 된 spi 플래시입니다. 나는 그것에 대해 아무런 문제가 없었습니다. 사용 가능한 fsck.jffs2가 있는지조차 모르겠습니다. 반면에 낸드 플래시는 ...하지만 다른 이야기입니다. SD 카드의 목적은 측정 데이터를 저장하는 것입니다. '모니터'프로그램은 결과를 파일에 추가하고 전략적인 동기화 배치를 갖습니다. 파일이 주어진 크기 이상이되면 새로운 파일이 생성됩니다. 주어진 수의 파일에 도달하면 가장 오래된 파일이 삭제됩니다. 전력 손실로 인해 현재 측정 파일이 손실되면 재난이 아닙니다. 파일은 보통 50-100kb이고 1 개의 결과는 보통 1kb입니다. 이것은 초기 개발 단계 일뿐입니다. 아무것도 고정되어 있지 않습니다. 임베디드 시스템에서 비 플래시 파일 시스템을 다루는 것은 이번이 처음입니다. (x86 서버에 ext4가 있습니다.)

나는 vfat로 시작했다. 기본 파일 시스템. (공장에서 공장을 선택해야 할 이유가 있다고 생각했습니다. 작동하는 경우에는 그다지 신경 쓰지 않습니다.) 내장 된 vfat 장치에서 전력 손실 문제를 본 적이 없습니다. 그래도 WinCE에서 FAT 관련 문제가 발생했습니다. 그러나 내 '모니터'프로그램이 100-200 파일에 도달하면 더 이상 생성을 거부했습니다. FAT에는 루트에서 특별한 파일 제한 문제가 있고 하위 디렉토리에서 약간 더 큰 문제가있는 것 같습니다. 1 디렉토리에 500-1000 파일을 만들 수 있어야합니다. 따라서 vfat는하지 않습니다.

그런 다음 ext2로 전환했습니다. 그래도 시작시 fsck를 삽입하지 않았습니다. (내가 그렇게해야한다는 것을 몰랐습니다.) 하루 안에 '모니터'프로그램이 'inode something something'오류로 인해 더 많은 파일을 만들 수 없었습니다. 재앙!

내 현재 솔루션은 시작할 때 "e2fsck -y"가있는 ext2입니다. 지금까지는 유망한 것으로 보입니다. 그러나 e2fsck와 'fsck at startup'의 전체 개념은 저에게 흥얼 거리고 있습니다. 자체적으로 e2fsck는 350kb 이상의 기본 플래시와 램을 소비하고 있습니다. (실행 중이 아닐 때) 이것이 가장 큰 프로그램임을 의미합니다. busybox보다 큽니다. 내 커널과 거의 비슷합니다.

ext3을 고려하고 있습니다. 그것은 메타 데이터를 저널링했지만 아프지 않을 것입니다. 그것이 얼마나 도움이 될지 의심 스럽습니다. 내 작은 파일과 제어 된 동기화를 통해 보호해야한다고 생각합니까? 순서는 쓰기 순서가 있습니다. 데이터가 다소 저널링됨을 의미합니다. 그러나 이로 인해 비 결정적 지연이 발생할 수 있습니다. 내 상황에서 나쁘다. (아마도 문제가 아닙니다.) 예약 된 동기화 기능도 있습니다. 예 : 5 초마다 커밋 내 동기를 방해하는 것 같아요. 쓰기가 너무 많으면 SD 카드에 좋지 않습니다. 심지어 산업적인 것. 이것을 비활성화하는 방법에 대한 문서를 찾을 수 없습니다. 그리고 ext3은 여전히 모든 시작마다 fsck를 실행해야합니다! 그러나 ext3은 여전히 ​​가능합니다.

내선 4. ext3의 많은 성능 문제를 해결합니다. 나는 실제로 성능이 필요하지 않습니다. 그리고 내 배포판에는 내장 mkfs.ext4 및 fsck.ext4가없는 것 같습니다. 아마도 그것은 문제가되지 않습니다. 그래도 그렇습니다. 예 : e2progs-libs (jfsutils에 대한 종속성)에는 많은 컴파일 문제가있는 것 같습니다.

JFS, XFS, BRFSS 모두 내 커널에서 지원합니다. 현재 내 사용자 공간 도구 상자에 포함되어 있지 않습니다. 모두 크고 복잡한 시스템 인 것 같습니다. 그리고 그들은 모두 시작할 때 'fsck'에 해당하는 것으로 보입니까?

나는 또한 자신의 파일 시스템을 던지는 것을 고려했다. 항상 파일 테이블의 사본을 2 개 쓴다. 순회 할 때 올바른 CRC와 최신 시퀀스 번호를 가진 것을 선택합니다. 2 단계 쓰기 시퀀스를 만듭니다. 임시 할당, 커밋시 수정. fsck가 필요하지 않습니다. 그래도 조금 순진한 것 같습니다.

업데이트 3 : BTW, 임베디드 시스템의 특성 (적어도 이것)은 자율적이고, 무인이며, 손이 닿지 않으며 몇 년 동안 실행해야한다는 것입니다. 인간과의 상호 작용 필요할 수있는 fsck와 같은 프로그램이 저를 놀라게합니다.


1
파일 시스템을 읽기 전용으로 마운트하고 쓰고 싶은 것을 위해 작은 파일 시스템을 만드십시오.
Chris Down

ZFS는 옵션 일 수도 있습니다 (데이터 무결성 검사 양호).
Ouki

이것은 이다 쓰기의 작은 파일 시스템
Illishar

예, ZFS도보고있었습니다. 그러나 배포판을 볼 때 정확하게 지원하지 않습니다. 그리고 저는 데이터 무결성에 관심이 없습니다. 나는 그냥 마운트하고 작동하기를 원합니다.
Illishar

당신이 살펴 보았다 btrfs.wiki.kernel.org/index.php/Main_Page 당신이해야 편집 우리가보다 효율적으로 당신을 도울 수 있도록 연구 질문
Kiwy

답변:


2

여기 이야기에 약간의 불일치 또는 모호성이 있습니다.

나는 여전히 '마운트 할 수 없습니다', '이 10 분 동안 기다립니다 fsck'에 직면하는 것보다 모든 것을 잃고 싶습니다.

실제로 말하지는 않지만 실제로 발생하는 문제임을 암시합니다. 하지만:

e2fsprogs-libs (jfsutils에 대한 의존성)는 배포판에서 컴파일하기가 어려워 보입니다.

의미 당신은 전혀 어떤 fsck가없는 때문에 e2fsprogs-libs대한 종속성입니다 e2fsprogs제공한다 e2fsck. 아마도 당신은 여전히 ​​계획 단계에 있고 예를 들어 시스템을 테스트하지 ext4않았지만 대신 JFS로 시작해야한다는 결론으로 ​​뛰어 들었습니까? 특별한 이유가 있습니까?

라즈베리 파이 교환 (pi의 기본 저장 장치는 SD 카드이기도 함)에서 많은 수의 사용자가 (내 자신을 포함하여) 한 번도 해본 적이 없지만이 종류의 문제로 인해 매우 좌절하는 것으로 나타났습니다. 모두. 처음에는 시스템을 완전히 종료해야한다는 사실을 모르는 사람이라고 가정했지만 설명 할 때 이해하기 어려운 것은 아니며 시스템이 제대로 종료 된 경우에도 시스템 을보고하는 사람들이 있습니다 .

당신은 이미 당신이 파워 컷을 견딜 수 있기 위해 이것이 필요하다고 말했지만 (충분히 공평합니다), 나는 약간의 pi 또는 SD 카드 또는 두 가지의 조합이 있음을 암시하기 때문에 이것을 언급 합니다. 플러그를 뽑거나 다시 넣을 때 정기적으로 발생하는 일부 이벤트 (서지?)로 인해 파일 시스템이 손상되었습니다. 또한 보지 못했습니다. 많은 사람들이 시도 할 많은 시간이 있습니다. 누군가가 btrfs 또는 jfs로 전환했다고 말하면 문제가 해결됩니다.

이것에 대한 또 다른 신비한 점은 사람들이 코드를 잡아 당기더라도 정기적으로 사용할 수없는 파일 시스템을 가져서는 안됩니다. 확실히 나는 파이로 여러 번 해냈고 일반 리눅스 박스에서 수백 번도 그렇지 않으면 점수를 얻습니다 (전원이 차단되고 시스템이 응답하지 않고 지 쳤고 화를 냈습니다). 작은 데이터 손실을 보았지만 빠른 fsck 후 사용할 수없는 파일 시스템이 손상된 것을 본 적이 없습니다.

다시 말하지만,이 모든 보고서가 사실이라고 가정하면 (많은 사람들이 그것에 대해 거짓말을하는 이유를 알지 못합니다), 완전히 마운트 해제하지 않는 것보다 훨씬 더 많은 일이 있지만, 이는 소수의 사용자에게만 영향을 미치고 다시 암시합니다. 어떤 종류의 일반적인 하드웨어 결함.

pi 에서 부트 스크립트 -y로 쓰므로 /forcefsck다음 부트에서 자동으로 실행되고 이것이 필요한지 여부에 관계없이 모든 문제가 해결됩니다. 700Mhz 단일 코어에서 ~ 4GB의 데이터를 포함하는 12GB 파일 시스템의 경우 ~ 10 초가 걸립니다. "십분"믿을 수 없을만큼 오랜 시간 같은 소리, 그래서 당신은 이미 "이것은 말한 특히 이후 입니다 쓰기의 작은 파일 시스템!".

sync정기적 으로 전화 를 걸 수도 있습니다 .

마지막으로, 실제로 발생한 문제에 대한보다 사실적이고 구체적인 세부 정보를 사용하여 문제 업데이트해야합니다 . 그렇지 않으면 너무 이른 XY 문제 처럼 보이므로 많은 경험과 조언이 필요한 사람들이 빨리 건너 뛸 수 있습니다.


실제로 내 e2fsck는 e2fsprogs-libs 종속성없이 컴파일 할 수 있습니다. 나는 그것에 대해서도 궁금했습니다. (busybox 버전이 아닙니다.) 그러나 나는 그것을 원하지 않고 싶습니다 ... 나는 더 많은 정보로 질문을 업데이트 할 것입니다.
Illishar

나는 그것이 libext2fs없이 작동한다는 것에 놀랐습니다 (또는 정적 버전을 만들었습니까? 아니면 어쩌면 이것은 다른 포장의 문제입니까? 어쨌든 ...). 향상된 저널링 가능한 경우 빠른 fsck 확인sync마운트 옵션으로 인해 ext2보다 ext4를 선택합니다. 그것과 저널링은 쓰기주기를 증가시킬 것이지만, 다른 파일 시스템 (예를 들어, 온라인 검사를하는 이론적 인 파일 시스템)이 견고성이 목표라면 어떻게하는지 거의 같은 일을 피할 수있는 방법을 찾기는 어렵다. 행운을 빌어 해결책을 찾으면 답을 추가하십시오.
goldilocks

2

이 프로그램은 계속 진행되어야합니다!

이것은 일반적인 요구 사항이며 안정적인 시스템을 선택할 때 Linux 시스템이 최선의 선택입니다.

당신의 노력은 올바른 방향으로 나아 가지 않는 것 같습니다. 그러나 안정적인 시스템을 얻기 위해 무엇을 할 수 있습니까?

첫 번째 레벨에서 파일 시스템을 향상시킬 수 있습니다.

  • 사용 yournal_data_ordered켜짐 ext3/ext4만들거나으로 수정할 때, 파일 시스템 tune2fs.
  • 함께 JFS사용 --replay_journal_only검사 할 때.
  • FSCKFIX=yes초기화 스크립트에서 설정 하여 자동 복구를 활성화하십시오 .

이것으로 충분하지 않으면 버그가있는 디스크를 마운트하지 않고 시스템을 부팅 할 수 있습니다. 대신 ramdisk버그가있는 디스크를 수동으로 확인하고 복구하는 동안 새로 만드 십시오. 스크립트로 자동화 할 수도 있습니다.

다음 단계에서는 임베디드 시스템을 그대로두고 고 가용성에 대한 몇 가지 주제를 읽어야합니다.


initscript의 경우 자동 검사는 OP가 피하려고하는 것입니다. 따라서 파일 시스템은 온라인 파일 시스템 검사를 지원해야합니다.
Bratchley

1
yournal_data_ordered또는 replay_journal_only이 확인 만 초 정도 걸립니다, 그 차이입니다.

1
예, 부탁합니다. 온라인 확인을 지원하는 파일 시스템을 알고 있습니까?
Illishar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.