무인으로 실행되는 시스템을위한 "안전한"ext4 구성


18

Linux를 실행하는 시스템이 오랫동안 무인 상태로 실행되어야합니다. 이 시스템은 산업용 CF 카드를 사용하여 저장합니다. 대부분의 경우 플래시에 대한 쓰기는 없지만 지금은 일부 구성 데이터 / 설정을 수정할 수 있습니다. 시스템은 정전에 강해야합니다.

이것을 위해 ext4를 사용하고 싶습니다. 이런 종류의 설정에 대해 ext4를 구성하는 가장 좋은 방법은 무엇입니까? 다음을 명심하십시오.

  • 성능은 전혀 문제 가 되지 않습니다 (특히 쓰기 성능)
  • 전원이 끊기면 마지막 몇 초 동안 작성된 데이터가 손실된다는 것을 의미하더라도 시스템은 항상 깨끗한 상태로 부팅해야합니다.
  • fsck를 피할 수 있다면 더 좋습니다.

(이 관련 질문에 대해 알고 있습니다 : 전원 손실시 ext4 / Linux 드라이브의 데이터 손상 방지 )

답변:


11

나는 보트에 자동화를위한 시스템을 구축하는 일을 해왔으며, 전제 조건이있었습니다 : 매 순간 전력이 감소하고 모든 것이 다시 올바르게 부풀려 져야합니다.

내 솔루션은 응용 프로그램 및 구성을위한 rw 폴더 만 사용하여 Gentoo 기반 initramfs 시스템을 구축하는 것입니다 (모든 라우터 / 방화벽 공급 업체가 사용하는 접근 방식). 이 솔루션은 시스템 업그레이드를 처리 할 때 더 복잡한 계층을 추가하지만 시스템이 항상 부팅되도록합니다.

특정 질문과 관련하여 (몇 초간) 빠른 fsck를 갖도록 EXT4 저널을 사용 가능하게 유지 하고 data = journal mount 옵션을 사용하거나 commit 옵션을 낮추 거나 sync 옵션을 사용 하여 버퍼를 항상 비워 두십시오 .

참조 : http://www.kernel.org/doc/Documentation/filesystems/ext4.txt


좋은! 응용 프로그램이 너무 많은 데이터를 쓰지 않으면 동기화 옵션에 만족해야합니다.
Giovanni Toraldo

1
보다 나은 위치는 Linux 커널 문서입니다. kernel.org/doc/Documentation/filesystems/ext4.txt 잠재적 데이터 손실을 최소화하기 위해 data = journal 및 commit = nrsec를 활성화하십시오 (* == 기본값)
Giovanni Toraldo

시간이 경과 된 커밋은 확실히 도움이됩니다. 1 초 간격으로 만 내려갈 수 있다고 생각합니다 (쓰기 집약적 인 연산에 대해서는 MAJOR 성능 저하가 있지만). 1 초의 데이터 손실을 감당할 수 없다면 더 큰 문제가 있습니다.)
voretaq7

2
저널링의 주요 긍정적 인 효과 중 하나는 충돌에서 복구하는 것이 커밋되지 않은 최신 변경 사항을 재생하는 것인데, 이는 전체 볼륨의 불일치를 확인하는 것보다 훨씬 빠릅니다. 이것이 주요 문제라면 기본 EXT4를 사용하여 만족해야합니다.
Giovanni Toraldo

1
@Grodriguez의 "손실"데이터는 "파일이 더 이상 존재하지 않습니다"에서 "왜 데이터베이스에 커널 덩어리가 있습니까?" -그것은 모두 "잃어버린"것에 달려 있습니다 :)
voretaq7

12

필자가 우려하는 한, EXT (모든 화신에서)는 꽤 끔찍한 파일 시스템이라고 말하면서 비교적 적은 수의 Linux / EXT에서 파일 시스템 손상의 더 " 흥미로운 "사례를 보았습니다. 내가 사용했던 상대적으로 많은 수의 Not-EXT 파일 시스템에서 내가 관리하는 시스템보다 {2,3,4} 시스템.
가능하다면보다 강력한 파일 시스템을 선택하십시오. 피할 수없는 일이 생겼을 때 스스로에게 감사 할 것입니다.


EXT4에는 개방적이고 밀려 드는 모든 개인적인 편견이 있지만, 내가 생각할 수있는 세 가지 기능이 있습니다.


  • 원하는 경우 저널링 EXT4는 저널 파일 시스템이 될 수 있습니다. 저널링 기능을 활성화하십시오 (특히 데이터 저널링 모드를 journal통해 tune2fs또는 마운트 옵션으로 설정).
    파일 시스템에 "커밋"되기 전에 모든 데이터를 EXT 저널에 써야하기 때문에 성능이 저하됩니다 (모든 쓰기는 기본적으로 두 번 발생 함). 그러나 저널 재생이없는 한 항상 복구 할 수 있습니다. 문제.

  • SYNChronous 마운트
    안전이 가장 중요한 경우 sync옵션을 사용 하여 파일 시스템을 마운트하는 것이 항상 좋습니다. 이렇게하면 모든 디스크에 즉시 쓰기가 수행됩니다. 다시 한 번 성능이 저하되지만 CF 카드를 끄는 정전 또는 임의의 낯선 사람이 발생할 경우 좋은 생각입니다.

  • 가능한 한 쓰기 가능한 파일 시스템 제한 이 하나가 EXT의 특정 아니지만,의 모든 너무 일반적인 리눅스 철학, 솔직히있다 "는에 단지 하나의 큰 루트 파티션 및 덤프 모든 것을 만들" 바보 . 적절한 파일 시스템 구조를 (작성 /, /var, /usr, /home, 등), 및 파일 시스템의 대부분은 읽기 전용으로 가능한 마운트합니다.
    이것은 보안을 위해 유닉스 시스템에 대한 일반적인 조언 이었지만 귀하의 경우 추가 이점이 있습니다. 파일 시스템에 쓸 수 없으면 파일 시스템을 손상시킬 수 없습니다.


완전 동기식 마운트의 기능은 모든 쓰기 후 단순히 호출하는 것과 같지 않습니다.sync 동기식 마운트는 데이터가 디스크에있을 때까지 파일 시스템 쓰기 호출에서 리턴되지 않습니다 (또는 최소한해서는 안됨). 호출 sync하면 보류중인 모든 쓰기가 플러시되지만 쓰기가 반환 될 때와 sync아직 디스크에 데이터가 기록되지 않을 수있는 반환에 대한 호출 사이에는 여전히 창 (단축)이 있습니다.
voretaq7

어떤 파일 시스템을 추천 하시겠습니까? 경험을 수량화 할 수 있습니까?
Mark Wagner

@embobo 내 경험은 전적으로 일화 적입니다. EXT 파일 시스템 제품군에 대해 스트레스 테스트를 한 적이 없지만, 오징어 서버가 "내 inode는 어디로 갔습니까?!" -파일 시스템이 멈춰서 결국 깨끗하게 표시되었지만, 모든 inode는 주장되었지만 결코 참조되지 않은 상태로 남았습니다. 특정 혼란을 해결하는 fsck는 긍정적으로 EPIC이었습니다 (우리는 새로운 FS를 만들었습니다). EXT 파일 시스템 제품군에 대한 모든 확신을 잃은 날이었습니다.
voretaq7

@Grodriguez Re : 저널링, 세 가지 옵션은 data=journal(위에서 설명한 것), data=ordered(메타 데이터가 저널링됩니다. 메타 데이터가 파일 시스템에 커밋되기 전에 데이터가 디스크에 커밋 됨) 및 data=writeback(데이터의 저널링 / 보호가 효과적으로 이루어지지 않음- 나쁜 것) 파일 중간의 정크와 같은 충돌 후 발생할 수 있습니다). 나는 ordered요즘 대부분의 리눅스 배포판에서 기본값 이라고 생각한다 .
voretaq7

2
"쓰기 가능한 파일 시스템을 가능한 한 많이 제한"외에도 : 데비안 위키에서는 특별한 처리가 필요한 데몬에 대한 많은 예제를 통해이를 정확하게 수행하기위한 안내서입니다. 너무, 대부분의 다른 distris 유효합니다 wiki.debian.org/ReadonlyRoot
krissi

7

EXT4는 시스템에 가장 적합한 선택이 아닙니다. 로그 구조 파일 시스템을 살펴볼 것을 제안합니다. 이러한 작업은 최신 '헤드'를 가리키는 포인터를 사용하여 데이터를 가상 스트림에 대한 쓰기 업데이트 스트림으로 처리합니다. 스토리지에 데이터 및 메타 데이터를 쓴 다음 포인터를 업데이트하면 업데이트가 발생합니다. 쓰기 후 포인터 업데이트 전에 충돌이 발생한 경우 최신 데이터는 손실되지만 파일 시스템은 일관됩니다.

두 개의 후보 파일 시스템은 LogFSNILFS 입니다. 둘 다 기본 Linux 커널에서 사용할 수 있습니다.


1

나는 당신의 건물에 대한 장치에 흥미가 있습니다. 실제로 적합하지 않은 파일 시스템을 사용하는 동안 임베디드 장치의 안정성을 경험했습니다.

Ext4 (및 제품군)는 다양한 하드웨어 및 사용 사례에서 수십억 시간을 사용하는 훌륭한 범용 파일 시스템입니다. 그러나 당신이 요구하는 것은 실제로 ext4와 맞지 않습니다. voretaq7과 Giovanni의 지침은 필요한 경우 ext4를 최대한 활용하는 데 도움이되지만 실제 대답은 요구 사항에 더 적합한 것을 사용하는 것입니다. Steve는 몇 가지 옵션을 제공했습니다. ext4 FS에서 계속 전원을 끄면 결국 혼란스러워집니다.

이것이 당신이 구축하고있는 일회성 시스템 인 경우, 더 적합한 것을 사용하거나 어느 시점에서 문제가 있다는 것을 받아들이도록 선택해야합니다. 100에서 1 또는 1000에서 1의 정전 만있을 수 있습니다. 이는 위험을 감수하기에 충분할 수 있으며 장치를 수동 개입없이 오랜 시간 (년간) 실행할 수 있습니다.

이것이 시장에 넓게 배포 / 반입하려는 제품인 경우보다 적합한 것을 사용하도록 선택할 수 있습니다. 또는 매년 결정을 내릴 장치의 일부를 지원하기 위해 비즈니스 결정을 내리고이를 복구하기 위해 교체 또는 수동 개입이 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.