나는 USB 하드 디스크를 구입하는 데 열중하지는 않지만 SD 카드는 많은 반복적 인 읽기 및 쓰기 작업에 적합하지 않다는 것을 알고 있습니다.
내 Raspberry Pi에서 SD 카드를 사용하는 동안 SD 카드의 수명을 연장하기 위해 취할 수있는 조치가 있습니까?
나는 USB 하드 디스크를 구입하는 데 열중하지는 않지만 SD 카드는 많은 반복적 인 읽기 및 쓰기 작업에 적합하지 않다는 것을 알고 있습니다.
내 Raspberry Pi에서 SD 카드를 사용하는 동안 SD 카드의 수명을 연장하기 위해 취할 수있는 조치가 있습니까?
답변:
이러한 방법은 다양한 방법으로 읽기 / 쓰기 수를 최소화하여 SD 카드의 수명을 늘려야합니다.
스와핑은 SD 카드의 일부를 휘발성 메모리로 사용하는 프로세스입니다. 이로 인해 사용 가능한 RAM의 양이 증가하지만 많은 수의 읽기 / 쓰기가 발생합니다. 성능이 크게 향상되지는 않습니다.
다음 swapoff
명령으로 스왑을 비활성화하십시오 .
sudo swapoff --all
또한 재부팅 후에 다시 나타나지 않도록해야합니다.
sudo apt-get remove dphys-swapfile
영구적으로 제거 할 수 있습니다. 이 답변에CONF_SWAPSIZE
설명 된 것처럼를 0으로 설정하면 작동하지 않는 것 같고 재부팅 후 여전히 100MB 스왑 파일을 만듭니다./etc/fstab
저널이 ext3
있거나 없는 저널링 파일 시스템을 사용하면 ext4
읽기 / 쓰기를 줄일 수 있습니다. 저널링이 비활성화 된 상태에서 파일 시스템을 사용하는 데있어 명백한 단점은 비정상적으로 마운트 해제 (예 : 사후 정전, 커널 잠금 등)로 인한 데이터 손실입니다.
ext3
로 마운트하여 저널링을 비활성화 할 수 있습니다 ext2
.
다음 ext4
과 같이 마운트 해제 된 드라이브에서 저널링을 비활성화 할 수 있습니다 .
tune4fs -O ^has_journal /dev/sdaX
e4fsck –f /dev/sdaX
sudo reboot
의 noatime 마운트 플래그를 SD 카드에있는 파티션에 파티션의 옵션 섹션에 추가하여 할당하십시오 /etc/fstab
.
파일 시스템에 대한 액세스 권한을 읽을 때 더 이상 파일과 관련된 atime 정보가 업데이트되지 않습니다. noatime 설정의 중요성은 시스템이 단순히 읽고있는 파일에 대해 파일 시스템에 쓸 필요가 없다는 것입니다. 이전 섹션에서 언급 한 것처럼 쓰기 비용이 다소 비쌀 수 있으므로 성능이 크게 향상 될 수 있습니다. 이 옵션이 활성화 된 상태에서 파일을 쓸 때마다 파일에 대한 쓰기 시간 정보가 계속 업데이트됩니다.
같은 높은 사용 디렉토리 /var/tmp/
가능성 및이 /var/log
의 RAM에 재배치 할 수 있습니다 /etc/fstab
다음과 같이 :
tmpfs /var/tmp tmpfs nodev,nosuid,size=50M 0 0
이를 통해 /var/tmp
디스크 공간으로 50MB의 RAM을 사용할 수 있습니다. 이 작업의 유일한 문제는 RAM에 마운트 된 모든 드라이브가 재부팅 후에도 지속되지 않는다는 것입니다. 따라서 마운트 /var/log
할 때 시스템을 재부팅하는 오류가 발생하면 이유를 찾을 수 없습니다.
영구 USB 하드 디스크에 일부 디렉토리를 마운트 할 수도 있습니다. 이에 대한 자세한 내용은 이 질문 에서 찾을 수 있습니다 .
Raspberry Pi는 외장 드라이브에서 루트 파티션으로 부팅 할 수도 있습니다. 이것은 USB 또는 이더넷을 통한 것일 수 있으며 부팅하는 동안 SD 카드를 사용하여 다른 장치로 위임 할 수 있습니다. 기본 커널이 USB 스토리지를 지원한다고 생각하지 않기 때문에 약간의 커널 해킹이 필요합니다. 이 질문 또는이 외부 블로그 게시물 에서 자세한 정보를 찾을 수 있습니다 .
noatime
기본값이어야합니다.
noatime
최소한 아치에서는 기본값이 아닙니다.
/var/tmp
메모리 에 넣는 것은 그리 좋은 생각이 아닙니다 . 어쩌면 당신은 그것을 혼동했을 것입니다 /tmp
.
noatime
문제 가 발생 하는 경우 relatime
디스크 쓰기를 완전히 제거하지 않고 읽기시 디스크 쓰기를 크게 줄이는 것을 사용할 수도 있습니다 .
Jivings 가 제공하는 옵션을 응용 프로그램 에서 사용할 수없는 경우 수명 을 연장하는 또 다른 옵션 은 필요한 것보다 훨씬 큰 SD 카드를 사용하는 것입니다.
대부분의 괜찮은 SD 카드는 웨어 레벨링 알고리즘을 사용하여 각 블록이 작성되는 횟수를 최소화하므로 SD 카드가 필요한 것보다 큰 경우 마모가 훨씬 더 넓은 여유 공간에 퍼질 수 있습니다.
웨어 레벨링이 중요한 이유 중 일부는 FAT (많은 SD 카드의 기본 형식) 와 같은 일부 파일 시스템 이 동일한 섹터를 반복해서 망치는 것입니다.
이에 대한 자세한 내용은 질문에 대한 답변을 참조하십시오 . SD / MMC 카드가 자체 컨트롤러를 사용하여 레벨링되는 것이 사실입니까? 이상에 전자 스택 거래소 특히, 이 답변 .
이 답변의 흥미로운 통계 중 하나 는
2GB 카드를 가져 와서 끝까지 반복해서 쓰는 것은 카드가 죽기 전에 더 이상 쓰기가 불가능하기 전에 평균 약 10TB입니다.
하지만 걱정되는 것은
SD 카드는 데이터가 나쁜시기를 알려주지 않습니다. 즉 PC 하드 드라이브처럼 I / O 오류를 반환하지 않습니다.
신뢰할 수있는 스토리지를 보장해야하는 경우 파일 시스템 선택이 중요 할 수 있습니다.
마지막 참고 사항 : SD 카드의 크기를 두 배로 늘리면 수명 이 두 배 이상 늘어날 수 있습니다.
즉, 200MB의 여유 공간이있는 2GB SD 카드가있는 경우 4GB 카드로 전환하면 여유 공간이 11 배, 균등화 용량이 길고 수명이 길고 16GB 카드로 전환하면 71 배의 무료 공간이 제공됩니다. 우주.
MMC_ERASE
로, MMC / SD 표준 어딘가에이 목적을 위해 (선택적) 명령이 정의되어 있습니다. 모든 SD 카드 중에서도 하나만 시도했지만 실제로는 Pi와 함께 제공됩니다.
내가 볼 수있는 유일한 것은 SD 카드를 바꾸지 않는 것입니다.
SD 카드를 교체하면 아마도 SD 카드를 죽일 수 있습니다.
당신이 더 많은 RAM이 필요하면, 당신은 zram을 사용하려고 할 수 있습니다에 게시물 프로그래머 http://raspberry.pi.gw.gd/t50-Using-ZRAM.html 라즈베리 파이에 ZRAM 사용에 대한 몇 가지 세부 사항을주는
http://en.wikipedia.org/wiki/ZRam의 zram에 대한 추가 정보
또한 가장 최근의 SD 카드는 오래된 것보다 훨씬 더 견고한 것으로 알려져 있습니다. 새로운 클래스 10 SD 카드를 구입하는 것이 좋은 옵션 일 것입니다.
완전히 램 상주 인 Puppy Linux를 실행할 수 있습니다. 부팅시 스토리지 이미지 (귀하의 SD 카드에있는)를 RAM에 복사 한 다음 주기적으로 변경 사항을 스토리지로 플러시하여 메모리에서 완전히 실행되므로 매우 작고 눈이 먼 속도입니다. 이 저장 빈도는 수동을 포함하여 사용자가 제어합니다.
강아지는 ext3 또는 ext4와 같은 표준 Linux 파일 시스템과 함께 계층화 된 aufs 또는 이전 unionfs 파일 시스템을 사용합니다. FAT 또는 NTFS 파티션에 상주 할 수도 있습니다.
RPi를 위해 특별히 설계된 두 가지 버전의 강아지가 있으며 그중 하나는 "Puppy Master"인 Barry Kauler가 만든 것입니다.
자세한 내용은 http://puppylinux.org/wikka/Puppi 로 이동 하십시오.
대부분의 사람들은 개인적인 경험이 아니라 가정에 대해 이야기합니다.
내 RaspberryPi를 RasPBX와 함께 8 개의 확장 기능과 팩스가있는 회사 스위치 보드로 사용하고 있습니다. LinkSYS SPA3000을 통해 3 개의 IP 기반 트렁크와 1 개의 유선 전화가 있습니다. 초기 Kingston 4GB SDCard가 먼지를 깨는 데 1 개월 밖에 걸리지 않았습니다.
나는 여전히 실험 중이며 백업이 없었습니다. BTW는 Pi가 APC UPS에 연결되어 있습니다. 그런 다음 전체 RasPBX를 처음부터 다시 설정했지만 이번에는 / var / log 및 / var / lib / mysql을 회사 NAS로 옮겼습니다. 이 SD는 3 개월 후에도 여전히 정상입니다.
그 다음 우리는 매우 더운 여름을 보냈습니다. 세 번째 달 동안 파이는 이더넷을 파란색으로 감지하지 못했습니다. 그런 다음 어느 날 모든 Led가 어둡고 부팅되지 않는다는 것을 알았습니다.
나는 Pi를 새로운 즉시 사용 가능한 것으로 교체했습니다. 고장난 것은 냉각 후 작동하기 시작했지만 다소 불규칙적이며 RasPBX로 부팅하면 비디오 모드가 그래픽으로 전환되지 않고 80 * 25 텍스트로 유지됩니다. 정말 엉망이되었습니다. 이후 히트 싱크 세트를 주문했습니다. 새로운 Pi는 현재 2 개월 이상 7/24 개월 동안 작동합니다.
따라서 7/24 환경에서 pi를 사용할 경우 저렴하지 마십시오. 방열판을 구입하고 SD 카드에서 / var / log 및 기타 사용중인 디렉토리를 사용하지 마십시오.
나는 모든 솔루션을 utilitze TMPFS와 비교했으며 가장 좋은 대답은 스크립트 준비 디렉토리 ( http://grenzdebiel.dyndns.org/wordpress/?p=98 참조 )를 적절한 / etc / defaults / tmpfs ( ( http://www.a-netz.de/2013/02/ramdisks-for-the-raspberry/ 참조 ).
라즈 비아에서 수행해야 할 단계는 다음과 같습니다.
1. 편집 /etc/default/tmpfs
및 설정 :
RAMLOCK=yes
RAMSHM=yes
RAMTMP=yes
다음 크기를 권장합니다.
TMPFS_SIZE=10%VM
RUN_SIZE=10M
LOCK_SIZE=5M
SHM_SIZE=10M
TMP_SIZE=25M
2. / etc / fstab을 사용하여 추가 디렉토리를 활성화합니다
tmpfs /var/log tmpfs size=20M,defaults,noatime,mode=0755 0 0
tmpfs /var/cache/apt/archives tmpfs size=100M,defaults,noexec,nosuid,nodev,mode=0755 0 0
tmpfs /var/spool/cups tmpfs size=100M,defaults,noatime,mode=0755 0 0
tmpfs /var/spool/cups/tmp tmpfs defaults,noatime,mode=0755 0 0
3. 스크립트 /etc/init.d/prepare-dirs
를 사용하여 /var/log
모든 디먼이 시작되도록 누락 된 디렉토리를 작성하십시오.
내 사건에 포함 된 것을 마지막에서보십시오.
4. 스크립트를 실행 가능하게 만드십시오 chmod 755 /etc/initd/prepare-dirs
.
5. 데몬이 시작되기 전에 부팅시 스크립트가 먼저 시작되는지 확인하십시오.
update-rc.d prepare-dirs defaults 01 99
내용 /etc/init.d/prepare-dir
:
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: prepare-dirs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Required-Start:
# Required-Stop:
# Short-Description: Create needed directories on /var/log/ for tmpfs at startup
# Description: Create needed directories on /var/log/ for tmpfs at startup
### END INIT INFO
# needed Dirs
DIR[0]=/var/log/lighttpd
DIR[1]=/var/log/cups
DIR[2]=/var/log/apt
DIR[3]=/var/log/ConsoleKit
DIR[4]=/var/log/fsck
DIR[5]=/var/log/news
DIR[6]=/var/log/ntpstats
DIR[7]=/var/log/samba
DIR[8]=/var/log/lastlog
DIR[9]=/var/log/exim
DIR[10]=/var/log/watchdog
case "${1:-''}" in
start)
typeset -i i=0 max=${#DIR[*]}
while (( i < max ))
do
mkdir ${DIR[$i]}
chmod 755 ${DIR[$i]}
i=i+1
done
# set rights
chown www-data.www-data ${DIR[0]}
;;
stop)
;;
restart)
;;
reload|force-reload)
;;
status)
;;
*)
echo "Usage: $SELF start"
exit 1
;;
esac
그게 다야.
플래시 셀 내구성 :
그것은 큰 카드와 정상적인 마모에 순수하게 수학입니다. 밤낮으로 8GB MLC 유형 플래시 카드에 쓰려고한다면 약 30 일이 걸립니다.
Techsnap의 에피소드 99에서 SSD를 착용하는 것에 대해 이야기하고 Allen 은 일상적인 사용에서 SSD를 착용하는 것이 불가능한 방법에 대해 설명 하며 스왑, 크론 등을 비활성화 할 염려가 없습니다. 지금 작동합니다! 스마트웨어 레벨링은 모든 것을 처리합니다.
Kingston에 인용 된 일반적인 마모 는 전문가 용 디지털 카메라의 수명 동안 27 년의 수명을 제공해야합니다.
일반적인 DSLR 카메라의 경우 몇 개월에 한 번씩 채워질 수 있습니다. Pi를 고려할 때 할당량을 실험하고 자주 플래시를하면 더 많은 비용이 소요될 수 있습니다. 일반적으로 배포판에 만족하면 몇 개월 또는 몇 년 동안 다시 표시하지 않습니다. 따라서 SD 마모를 연장하려면 SD의 IO 감소에 대한 몇 가지 조언을 따르는 것이 좋습니다.
플래시 가격이 떨어지고 기술이 훨씬 나아졌습니다.
대부분의 SD 카드는 2 세대 또는 3 세대 장치보다 수명이 길며 그 당시에는 훨씬 더 좋고 저렴한 업그레이드로 사용하기에는 작고 너무 느리게 간주됩니다!
앞에서 언급했듯이 주요 문제는 재부팅 사이에 저장할 가치가 없지만 캐시 파일, 다운로드 폴더 등과 같이 자주 작성되는 파일 및 디렉토리입니다.
Raspbian과 Debian 및 Ubuntu에는 unburden-home-dir 이라는 패키지가 있습니다.이 패키지 의 주요 목적은 이러한 파일을 tmpfs
마운트 나 마모가 덜 발생하는 외장 하드 디스크 와 같이 덜 문제가있는 장소에 심볼릭 링크 하는 것입니다.
일반적으로 X에서 로그인시 실행되며 GUI 응용 프로그램의 캐시 파일을 대상으로하지만 스크립트 등에서 호출하여 사용자의 홈 디렉토리에있는 임의의 파일로 구성 할 수도 있습니다.
iotop -bktoqqq
그리고 에 기반합니다 iostat -dzp 5
. 문제점 및 솔루션에 대한 아이디어를 얻으려면 먼저이 명령을 실행해야합니다.
sudo systemctl disable dphys-swapfile
sudo rm /var/swap
noatime,commit=1800
옵션 을 사용하여 SD 카드의 모든 파티션을 마운트하고 다음 항목을 RAM에 마운트하십시오 /etc/fstab/
.
/dev/mmcblk0p1 /boot vfat defaults,noatime,commit=1800 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime,commit=1800 0 1
tmpfs /tmp tmpfs size=50M,nodev,nosuid 0 0
tmpfs /var/tmp tmpfs size=10M,nodev,nosuid 0 0
tmpfs /var/cache/samba tmpfs size=5M,nodev,nosuid 0 0
커밋은 쓰기를 지연시키고 먼저 수집합니다.
/var/tmp/log/
내 설명을 참조하십시오 . 로그 파일 쓰기를 줄일 수있는 방법 .
그것은 크롬 쓰기가 심하게 멈출 수 없다는 것을 알 수 있습니다 ( 176727 , 52663 참조 ). 이는 캐시 및 사용자 데이터 디렉토리에 영향을줍니다. 크롬 / 팁과 트릭 이가 RAM에 이동할 수 있습니다 방법을 설명합니다. Raspberry에는 RAM이 많지 않으므로 제안 된 Tab Suspender 는 RAM을 저장하는 데 유용합니다.
캐시 크기를 제한하고 편집 /etc/chromium-browser/customizations/00-rpi-vars
하여 RAM으로 옮깁니다.
CHROMIUM_FLAGS="--disable-quic --enable-fast-unload --enable-tcp-fast-open --disk-cache-size=10000000 --media-cache-size=5000000"
이제 XDG_CACHE_HOME
항목을 다음 /etc/security/pam_env.conf
으로 변경하여 캐시가 RAM 디스크로 이동할 수있을 정도로 작습니다.
XDG_CACHE_HOME DEFAULT=/tmp/@{PAM_USER}/cache
이제 내 두 사용자는 RAM에 작은 브라우저 캐시가 있습니다. 충분하지 않으면 필요에 따라 캐시 또는 / tmp / 크기를 변경하십시오.
또한 사용자 데이터 디렉토리 ( .config/chromium/
)는 많은 쓰기를 경험합니다. 프로필 동기화 - 데몬 에 의해 추천 크롬 / 팁과 트릭 . tmpfs에서 브라우저의 프로필을 관리하고 주기적으로 물리 디스크에 다시 동기화하기 위해 개발되었습니다. 불행히도이 패키지는 아직 Raspbian 8.0 (Jessie) 배포판의 일부가 아닙니다. 그래서 나는 이것을 아직 테스트하지 않았습니다.
필요없는 패키지 및 파일을 제거하여 여유 공간을 확보하십시오. 이렇게하면 마모가 파티션 전체에 더 고르게 퍼집니다.
이제 실행 iotop -bktoqqq
하고 iostat -dzp 5
다시 시스템이 유휴 상태 일 때 쓰기 액세스에 상당한 감소를 참조하십시오. 몇 분 동안 디스크에 아무것도 기록되지 않습니다. 그리고 녹색 ACT LED가 깜박이는 것에 대해 걱정하지 마십시오 . 분명히 좋은 쓰기 액세스 표시기가 아닙니다.
syslog 출력을 다른 서버로 스트리밍하여 쓰기주기를 약간만 줄일 수 있습니다. 물론 이러한 서버를 syslogd
실행하는 것은 전제 조건입니다. 그러나 Pi가 Linux 애호가를위한 장난감이되는 경우가 종종 있습니다. :-)
이 스트리밍을 활성화하려면 다음과 같은 문장을 삽입하십시오.
*.* @myserver.mydomain
파일의 맨 위 부분 /etc/rsyslog.conf
에서 다른 모든 행을 주석 처리하고을 실행하여 로깅을 다시 시작하십시오 service rsyslog restart
. 그런 다음 선택한 서버에서 메시지가 들어와야합니다.
이것의 한 가지 분명한 부작용은 동일한 서버의 다른 컴퓨터와 함께 Pi를 쉽게 모니터링 할 수 있다는 것입니다. 한 가지 단점은 시스템 시작 및 종료 중에 네트워크 연결이 아직 설정되지 않았거나 이미 종료 된 경우 일부 메시지를 잃을 수 있다는 것입니다.
journald
저널에 저장하는 모든 로깅을 수행합니다 . 또한 수신 journald
중인 syslog 소켓에 로그를 전달 하도록 구성 합니다 rsyslogd
. 메시지의 추가 사본이 아래의 로그 파일에 저장됩니다 /var/log
. 당신은 사용에 드시면 journalctl
로그를 검색 할 (그리고보다 훨씬 더 잘 작동 /var/log
당신이 그것을 잘 알고 일단) 완전히 비활성화 할 수 있습니다 rsyslog
및 일부 쓰기를 저장합니다.
참고 : 100,000 사이클 제한은 키보드의 키조차 모든 컴퓨팅 장치에 적용되는 가설입니다. 적절한 냉각 조건에서 적절한 Pi / 셧다운 사이클을 실행하면 유추하기보다는 더 나은 결과를 얻을 수 있다고 생각합니다.
또한 이것은 내 의견을 보강 할 수 있습니다.
사용자 Pi [default] 외에 새로운 사용자를 추가하십시오. 새 드라이브의 홈 디렉토리를 외장 드라이브 [thumb / hard drive]에 지정하십시오. 새 사용자에게 슈퍼 사용자 권한을 부여하고 기본 계정으로 사용을 시작하십시오.
이게 도움이 되길 바란다..
/var/log
및을 방지 할 수 없습니다 /var/tmp
. 또한 경험 을 통해 적절한 냉각이 차이를 만든다는 증거가 "믿습니다"라고 말하는 것보다 훨씬 낫습니다.
기본 syslog 데몬 (일반적으로 rsyslog) 대신 busybox의 syslog 데몬 ( Raspbian / Debian / Ubuntu의 busybox-syslogd 패키지 에 있음)을 사용하십시오. Raspbian / Debian / Ubuntu에서 기본적으로 busybox의 syslogd는 디스크가 아닌 메모리의 링 버퍼에만 로그인합니다. 링 버퍼의 크기는 기본적으로 128kB입니다. 예를 들어 오래된 로그 항목이 곧 회전되어 사라집니다. 그러나 더 많은 RAM을 사용하도록 구성 할 수 있습니다.
그럼에도 불구하고 이것은 syslog 데몬을 전혀 사용하지 않는 것보다 훨씬 더 나은 해결책입니다. 즉, 여전히 로그인하여 약. 명령과 (링 버퍼의 크기에 따라 구성된) 지난 몇 시간 또는 며칠 logread
. 필터 스크립트를 사용하여 흥미로운 로그 항목 만 저장하거나 네트워크를 통해 로그 항목을 전달 logread -f
하는 등의 tail -f
유사한 동작을 하는 데 사용할 수도 있습니다 stunnel
.
내가 한 몇 가지 :
dphys-swapfile의 chmod (/ etc의 어딘가-현재 PI 근처에 있지 않음)는 다음을 수행합니다.
sudo chmod a-x dphys-swapfile
부팅시 사소한 오류가 발생합니다 (서비스 dphys-swapfile을 시작할 수 없습니다)-더 좋은 방법이 있다고 가정하십시오 ... rc-update ??
또한 카메라 모듈에서 이미지를 캡처하여 결국 웹 서버 (Pi)에 넣습니다. / dev / ram0을 ext2로 포맷하고 / media / ramdrive로 마운트했습니다 (/etc/init.rc 사용). 한 번의 스냅에 충분한 4 메가입니다. SD에 쓰지 않습니다.
서버 (oululife.dnsdynamic.com)는 실험적이지만 웹에 있습니다. 실제로 스트레스를 풀기 위해 MP4 에피소드 'Heartbeat *'도 스트리밍했습니다. 그것은 lighttpd, Mysql, PHP, WordPress를 실행하며 웹을 통해 원격으로 스트리밍 할 때도 땀을 거의 흘리지 않으며 평균로드는 약 0.2입니다. 오버 클럭킹이 전혀 없습니다. Model-B rev. 연중 무휴 24 시간. 따라서 다른 15 / dev / ramX에 로그 파일을 가져올 수 있다면 지난 몇 년 동안 Micro-SD 16G 카드가 사용됩니다 ....