임베디드 리눅스용 부식 방지 SD 카드 파일 시스템?

임베디드 리눅스용 부식 방지 SD 카드 파일 시스템?

최근 우리는 원격 감지 데이터를 표시하는 데 사용되는 Raspberry Pi 기반 "키오스크"라는 클라이언트와 관련하여 다소 불쾌한 상황에 직면했습니다(데이터 수집 서버에서 자체 업데이트 웹 페이지를 표시하는 키오스크 모드 브라우저보다 더 특이한 것은 없습니다). 파일 시스템 손상. Ext4에는 수동 fsck가 필요하며 시스템은 내일 중요한 데모의 일부가 될 예정이며 즉시 서비스를 받아야 합니다. 물론, 밤에 시스템을 종료할 때 고객에게 시스템을 제대로 종료하라고 요구할 수는 없습니다. 시스템은 이러한 남용을 견딜 수 있어야 합니다.

앞으로는 이런 상황이 발생하지 않도록 하고, 이를 방지할 수 있는 파일시스템으로 운영체제를 옮기고 싶습니다. MTD 장치에는 많은 파일 시스템이 있으며 이를 SD 카드(표준 블록 장치)에서 실행하려면 몇 가지 심각한 점프가 필요합니다. 손상 저항성이 좋은 다른 파일 시스템(로그 ​​등)이 있습니다. 나는 여전히 그들의 장단점을 합리적으로 비교할 필요가 있습니다.

Linux에서 사용할 수 있는 파일 시스템은 예상치 못한 정전이 발생할 경우 손상으로부터 최상의 보호 기능을 제공하며 불가능한 문제를 뛰어넘을 필요가 없습니다.야프스2SD에 설치하려면

웨어 레벨링은 장점이지만 필수는 아닙니다. SD 카드에는 일반적으로 완벽하지는 않더라도 자체 메커니즘이 있지만 시스템은 "플래시 친화적"이어야 합니다(NTFS와 같은 시스템은 한 달 안에 SD 카드를 파괴할 수 있음).

답변1

단일 SD 카드에 대한 최고의 손상 방지 기능은 다음과 같습니다.RAID1의 BTRFS자동 청소 모드는 미리 정의된 시간마다 실행됩니다.

혜택:

  1. 파일 시스템에 대한 읽기 및 쓰기 기능을 유지합니다.
  2. 투명한 압축 및 스냅샷과 같은 매우 유용한 옵션을 RPi에 제공하는 모든 기능을 갖춘 최신 파일 시스템
  3. 특히 Flash를 염두에 두고 설계됨

수행 방법은 다음과 같습니다.

저는 ArchARM Linux에서 RaspberryPi를 실행하고 있고 제 카드는 SD 카드 리더에 있으므로 다른 배포판과 /dev 인터페이스에 맞게 이 지침을 수정하세요.

다음은 파티션 레이아웃의 예입니다.

/dev/mmcblk0p1: fat32 boot partition
/dev/mmcblk0p2: to be used as btrfs partition
/dev/mmcblk0p3: to be used as btrfs partition (mirrored with the above)
/dev/mmcblk0p4 (optional): swap

btrfs를 RAID1에 통합하려면 다음과 같이 파일 시스템을 생성합니다.

mkfs.btrfs -m raid1 -d raid1 /dev/mmcblk0p2 /dev/mmcblk0p3

rsync -aAXv그러면 이전에 백업한 시스템을 사용할 수 있습니다 .

raid1의 BTRFS에서 부팅하려면,initramfs를 수정해야 합니다.. 따라서 시스템이 이전 파일 시스템에서 계속 실행되는 동안 다음을 수행해야 합니다.

라즈베리는 일반적으로 mkinitcpio를 사용하지 않으므로 설치해야 합니다. 그런 다음 mkinitcpio.conf의 MODULES 배열에 "btrfs"를 추가하고 다음 명령을 사용하여 initramfs를 다시 생성해야 합니다.

mkinitcpio -g /boot/initrd -k YOUR_KERNEL_VERSION

YOUR_KERNEL_VERSION 대신 무엇을 입력할지 확인하려면 다음을 실행하세요.

ls /lib/modules

커널을 업데이트하는 경우 재부팅하기 전에 initramfs를 다시 생성해야 합니다.

그런 다음 RPi의 시작 파일을 수정해야 합니다.

cmdline.txt에는 다음이 필요합니다.

root=/dev/mmcblk0p2 initrd=0x01f00000 rootfstype=btrfs

config.txt에 다음을 추가해야 합니다.

initramfs initrd 0x01f00000

이 모든 작업을 수행하고 btrfs RAID1 시스템으로 성공적으로 부팅한 후에 남은 유일한 작업은 다음과 같이 systemd 타이머(선호) 또는 cron(dcron)을 사용하여 정기적인 정리(3-7일마다)를 설정하는 것입니다.

btrfs scrub start /

파일 시스템에서 실행되어 모든 파일의 체크섬을 비교하고 손상된 부분이 발견되면 복구합니다(올바른 복사본으로 교체).

BTRFS RAID1, 단일 미디어 및 Raspberry Pi의 조합은 이것을 매우 신비롭게 만듭니다. 모든 조각을 하나로 모으는 데 약간의 시간과 노력이 필요했지만 여기에 있습니다.

답변2

나는 다른 접근 방식을 취하고 읽기 전용 파일 시스템을 사용하겠습니다. 내 Raspberry Pi는 SD 카드에서 루트 파일 시스템 읽기 및 쓰기를 사용할 때 충분히 안정적이지 않습니다. 커널 명령줄(ro)을 통해 루트를 시작하거나 전체 시스템이 포함된 initramfs를 사용할 수 있습니다.

둘 다 제가 직접 만든 빌드 시스템인 OpenADK를 사용하여 만들 수 있습니다. (http://www.openadk.org)

답변3

여러 가지 이유로 자기 스토리지보다 플래시 스토리지가 더 선호되지만, 이 애플리케이션의 경우 주로 움직이는 부품이 없기 때문이라고 말하고 싶습니다. 즉, "부패 방지" 파일 시스템은 없다고 생각하지만 몇 가지 강력한 파일 시스템(ext4가 그 중 하나)과 손상을 완화하는 데 도움이 되는 몇 가지 전략이 있습니다.

메모리 디스크

RPi 이미지에 없는 경우가지다변경 사항이 없는 것 같습니다. 아무것도 디스크에 쓰려고 시도하지 않거나 시도해야 하는 경우 생성된 루트 파일 시스템을 사용해 보십시오.RAM에 압축 풀기. 여기서의 아이디어는 부팅 시 압축된 루트 파일 시스템이 있고 RAM으로 압축이 풀린다는 것입니다. 모든 변경 사항은 RAM 디스크에서 발생하므로 실제로 SD 카드에 쓰기가 없고 부팅 시에만 읽습니다. 이렇게 하면 드라이브의 읽기/쓰기 횟수가 줄어들어 수명이 연장됩니다. 이는 다음을 수행할 때 수행하는 작업과 유사합니다.CD에서 Linux 부팅, 그리고 가장 먼저 일어날 일 중 하나입니다리눅스가 시작되면.

답변4

Linux는 다양한 파일 시스템을 제공합니다.외부 4내가 더 신뢰하는 사람. 의심스러우면 읽기-쓰기로 마운트될 파티션에 ext4를 사용해야 합니다.

이것외부 2파일 시스템은 훨씬 더 취약합니다. 이는 읽기 전용으로 마운트하거나 올바르게 마운트 해제할 수 있는 시스템에 매우 적합한 파일 시스템입니다. 그러나 일단 정전되면 부패가 일어날 가능성이 매우 높습니다.외부 2.

고려해야 할 또 다른 옵션제프스일부 Linux 버전에서는 jfs 파일 시스템도 안정적이지 않습니다. 손상될 가능성이 적음제프스비교외부 4.제프스또한 설치 시간과 파일 시스템 확인 시간이 빠릅니다.

관련 정보