我并不是很想购买USB硬盘,但我知道SD卡不适合许多重复的读写操作。

我可以采取任何步骤可以延长我的Raspberry Pi使用SD卡的寿命吗?

评论

如果您全天候24/7全天全天候写入内容,则16GB的内容将持续30天。在正常使用情况下,基于10,000个写入周期,您可以期望大约27年。如果它在50年内使用100,000个写周期。聪明的磨损均衡逻辑使卡片越大,使用寿命越长

哇,这真是太好了,我不知道您的16gb sd在全速运行下可持续30天的第一点。我想不停地将视频录制到sd中,然后再传输它并不是最好的主意。

有了这些解决方案带来的所有性能优势,为什么不每几年支付10美元呢?

#1 楼

这些方法应通过各种方式最大程度地减少读写次数,从而延长SD卡的使用寿命:

禁用交换

交换是使用部分SD的过程卡作为易失性内存。这将增加可用的RAM数量,但会导致大量的读/写操作。不可能显着提高性能。

使用swapoff命令禁用交换:重新启动:


对于使用dphys-swapfile管理交换文件(而不是“正常”交换分区)的Raspbian,您只需sudo apt-get remove dphys-swapfile即可将其永久删除。最好删除,因为按照此答案中的说明将CONF_SWAPSIZE设置为0似乎无效,并且在重新启动后仍会创建100MB的交换文件。
对于其他使用交换分区而不是交换文件的发行版,从/etc/fstab删除相应的行


在文件系统上禁用日记功能

使用诸如ext3ext4之类的日记文件系统而没有日志是减少读取/写道。使用禁用日志功能的文件系统的明显缺点是由于不当卸载而导致的数据丢失(即,断电后,内核锁定等)。

您可以通过将ext3挂载为ext2来禁用ext4上的日志记录。

noatime挂载标志

通过将noatime挂载标志添加到/etc/fstab中分区的选项部分中,将其分配给SD卡上的分区。


读取对文件系统的访问将不再导致与文件关联的atime信息的更新。 noatime设置的重要性在于,它消除了系统对简单读取的文件进行文件系统写入的需求。如前一节所述,由于写入可能会有些昂贵,因此可以带来可观的性能提升。请注意,在启用此选项的情况下,只要将文件写入文件,写入时间信息就会继续更新。


RAM中的目录

诸如/var/tmp/以及可能的/var/log之类的目录可以像以下那样重定位到/etc/fstab中的RAM:这样做的唯一问题是,RAM中安装的所有驱动器在重启后都不会持续存在。因此,如果您安装/var/tmp,并且系统遇到导致其重新启动的错误,则您将无法找到原因。
外部硬盘中的目录还将某些目录安装在永久性USB硬盘上。有关此问题的更多详细信息,请参见此问题。

Raspberry Pi也可以从外部驱动器引导其根分区。这可以通过USB或以太网进行,这意味着SD卡仅在引导过程中用于委派给其他设备。这需要一些内核破解才能完成,因为我认为默认内核不支持USB存储。您可以在此问题或此外部博客文章中找到更多信息。

评论


noatime应该是默认值。

–亚历克斯·张伯伦
2012年6月13日上午8:54

@AlexChamberlain:noatime不是默认值,至少在Arch上不是。

–活动
2012年6月18日11:19



它是最新的Raspian版本。

–奥利
2012年8月23日在23:06

据此:superuser.com/a/168126/105936,将/ var / tmp放入内存并不是一个好主意。也许您将它与/ tmp混淆了。

– inf3rno
16年2月13日在2:06

请注意,如果noatime导致您遇到问题,您还可以使用relatime,它可以显着减少读取时的磁盘写入,而不是完全删除它们。

– Mark Booth
16年7月13日在13:06

#2 楼

如果您的应用程序无法使用Jivings提供的选项,那么可以延长其使用寿命的另一种选择是使用比您需要的容量大得多的SD卡。 />
大多数体面的SD卡都使用耗损均衡算法来最小化每个块的写入次数,因此,如果SD卡大于您的需要,耗损会散布到更大的可用空间区域。损耗均衡如此重要的部分原因是某些文件系统(例如FAT(许多SD卡的默认格式))会反复敲击相同的扇区。

有关此的更多信息,请参见以下问题的答案:SD / MMC卡是否确实通过其自己的控制器进行了磨损平衡?尤其是这个答案。超过平均10 TB之前,该卡将失效,并且不再可写。


但令人担忧的是,


SD卡不会让您知道数据何时损坏,即不会像PC硬盘驱动器一样返回I / O错误。


如果需要保证可靠的存储,这可能会使文件系统的选择变得很重要。 。

最后一点:将SD卡的容量加倍可能会使其寿命延长一倍以上。

即如果您有2 GB的SD卡具有200 MB的可用空间,那么切换到4 GB的存储卡将为您提供11倍的可用空间,磨损平衡能力和使用寿命,而切换到16 GB的存储卡将为您提供71倍的可用空间。

评论


为了首先让SD卡执行耗损均衡,需要告知哪些块实际上可以免费使用。 fstrim可以这样做。

– JimmyB
13年8月27日在15:23

不需要修剪,但没有修剪,仅当操作系统重用块时(而不是停止使用它时),块才被重用。据我所知,trim是一种SSD功能,SD卡不支持该功能,而SD卡可以通过更简单的协议进行访问。

– Mark Booth
13年8月27日在16:07



@Mark,您的第一点很正确。 -关于第二点,仅出于此目的,在MMC / SD标准中的某处定义了(可选)MMC_ERASE命令。尽管我尝试过所有SD卡,但实际上只有一种(Pi随附的SD卡)真正支持它。

– JimmyB
2014年5月26日晚上8:30

在这种情况下,分区大小重要吗?我的意思是,如果我有一个16GB的卡和一个具有4GB唯一ext4分区的系统,它还会利用剩余的12GB进行损耗均衡吗?

–natenho
2015年9月22日14:26在

对于磨损平衡良好的SD卡,很难告诉@natenho是,对于实施较差(或没有)的SD卡,很难告诉@natenho。

– Mark Booth
15年9月23日在8:25

#3 楼

我唯一看到的是不要交换SD卡。

交换SD卡可能会杀死SD卡。

如果需要更多RAM,您可以尝试使用zram,http://raspberry.pi.gw.gd/t50-Using-ZRAM.html上有一篇文章,提供了在树莓派pi上使用ZRAM的一些详细信息

更多信息http://en.wikipedia.org/wiki/ZRam上的zram可能是一个不错的选择,您想长时间看到它。

#4 楼

这里的大多数人都在谈论他们的假设,而不是个人经验。通过LinkSYS SPA3000,我们有3个基于IP的中继和一条固定电话。我最初的金士顿4 GB SD卡仅用了一个月就咬了灰尘。

我仍在尝试,没有备份。顺便说一句,Pi已连接到APC UPS。然后,我从头开始重新设置了整个RasPBX,但是这次我将/ var / log和/ var / lib / mysql移到了我们的公司NAS。这个SD在3个月后还是可以的。

然后我们度过了一个炎热的夏天。在第三个月中,pi开始没有突然检测到以太网。然后有一天,我发现所有的LED都暗淡了,无法启动。

我用现成的全新Pi替换了Pi。降温后,混乱的机器开始工作,但是它工作起来很不稳定,并且当它启动到RasPBX时,视频模式不会切换到图形,而是停留在80 * 25文本格式。真的搞砸了。从那以后,我订购了一套散热器。新的Pi可以在7/24上使用超过2个月。 var / log和SD卡上的其他繁忙目录。

评论


确保var / log在合适的设备上听起来像是很好的建议。在最初有问题的月份中,出于兴趣,您是否也将语音信箱存储在USD卡上?我只是想知道,如果我决定启用语音信箱,那么高耐用性的uSD卡(例如为Dash Cam使用的卡)是否会更好地适合于我的RasPBX部署。

– Mark Booth
19年1月28日在16:00

#5 楼

您可以尝试运行完全位于ram的Puppy Linux。它非常小巧,速度极快,因为它可以通过在启动时将存储映像(在您的情况下为SD卡上)复制到RAM中,然后定期将更改刷新回存储中来完全在内存中运行。此保存的频率由用户控制,包括手动控制。

Puppy使用分层的aufs或更旧的unionfs文件系统以及任何标准Linux文件系统(例如ext3或ext4)。它也可以驻留在FAT或NTFS分区上。

至少有几个专门为RPi设计的Puppy版本,其中一个由“ Puppy Master” Barry Kauler创建。 br />
有关更多信息,请访问http://wikka.puppylinux.com/Puppi

#6 楼

我已经比较了所有使用utilitze TMPFS的解决方案,最好的答案是使用适当的/ etc / defaults / tmpfs(参见http://grenzdebiel.dyndns.org/wordpress/?p=98)编写的脚本的综合。 (请参阅http://www.a-netz.de/2013/02/ramdisks-for-the-raspberry/)。

要在raspbian上执行的必要步骤是:

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


就是这样。

评论


Puppy Linux也将TMPFS用于所有内容。

– DocSalvager
2015年9月9日下午6:32

第四点是错字,即chmod 755 /etc/init.d/prepare-dirs

– DarkSkull
3月25日10:32

#7 楼

禁用交换文件:


sudo dphys-swapfile swapoff


无需卸载,但是,如果您不使用它,并且确实想要空间,您可以安全地将其删除。要删除的备用命令:


sudo dphys-swapfile卸载


用法:/ sbin / dphys-swapfile {setup | swapon | swapoff | uninstall }

#8 楼

这些是我对Debian 8.0(Jessie)的建议。它们基于iotop -bktoqqqiostat -dzp 5。您应该先运行以下命令以了解问题及其解决方案。

1。禁用交换

sudo systemctl disable dphys-swapfile
sudo rm /var/swap


2。使用安装选项和RAM

通过noatime,commit=1800选项安装SD卡上的所有分区,并使用/etc/fstab/中的这些条目将以下目录安装到RAM:

/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


提交会延迟写入并首先收集它们。

3。将最频繁的日志文件记录到/var/tmp/log/


请参阅我的描述如何减少对日志文件的写入。

4。阻止Chromium锤击SD卡

事实证明,Chromium写入过多,无法停止(请参阅176727,52663)。这会影响缓存和用户数据目录。 Chromium / Tips和技巧说明了如何将其移动到RAM。由于Raspberry的RAM不足,建议使用Tab Suspender来节省RAM。 to

CHROMIUM_FLAGS="--disable-quic --enable-fast-unload --enable-tcp-fast-open --disk-cache-size=10000000 --media-cache-size=5000000"


现在,通过将/etc/chromium-browser/customizations/00-rpi-vars中的XDG_CACHE_HOME条目更改为

XDG_CACHE_HOME  DEFAULT=/tmp/@{PAM_USER}/cache

现在我的两个用户在RAM中有一个小的浏览器缓存。如果这不足以根据需要更改高速缓存或/ tmp /大小。

b)用户数据目录

用户数据目录(/etc/security/pam_env.conf)也会写入大量数据。 Chromium / Tips和技巧建议使用Profile-sync-daemon。它旨在管理tmpfs中浏览器的配置文件,并定期将其同步回物理磁盘。不幸的是,该软件包尚未成为Raspbian 8.0(Jessie)发行版的一部分。所以我还没有测试过。

5。 SD卡上的可用空间

通过卸载不需要的软件包和文件来释放空间。这样可以使磨损更均匀地分布在您的分区上。

完成!几分钟没有任何内容写入磁盘。不用担心绿色ACT LED闪烁。显然,这不是一个好的写访问指示器。

评论


如果要添加“释放空间以更均匀地分散磨损”,这还意味着如果您的安装映像未占用您的所有SD卡空间,那么就可以扩展文件系统。另外,由于更多的空间可扩展磨损并延长卡的使用寿命,因此“更大”的卡应使用更长的时间。

– GChuf
7月7日12:09

#9 楼

闪存单元耐久性:


对于多层单元(MLC)闪存,每个物理扇区最多10,000个写入周期。
对于多层单元(SLC)闪存,向上每个物理扇区最多100,000个写周期。
较新的SSD提供每个物理扇区100万个写周期。如果您要日夜不停地写入8GB MLC型闪存卡,则大约需要30天才能杀死它。不可能在日常使用中磨损SSD,我们无需担心禁用交换,克隆和其他所有功能。现在就可以使用!智能穿戴均衡器可以处理所有问题。

金士顿(Kingston)引用的正常穿戴应为您提供27年的专业数码相机寿命。


对于普通的数码单反相机,您可能每隔几个月就将其装满一次。考虑到Pi,
如果您尝试分配内存并经常刷新,则可能要付出更大的代价。通常,一旦您对发行版感到满意...几个月或几年后都不会刷新它。因此,要延长SD的磨损,最好遵循一些减少SD上IO的建议。

大多数SD卡的寿命将超过两代或三代设备,到那时,它将被认为体积太小,使用速度太慢且无法提供更好,更便宜的升级!

评论


出于安全目的而设置了网络摄像头的Raspberry Pi可能正在24/7写入数据。我想在这种情况下,固态硬盘可能更好。

–高度不规则
13年3月15日在8:46



是的,但不是在整个时间内依次写入所有扇区。对其进行最少的磨损管理,并且新数据始终进入最少的访问扇区/区域。该视频不会覆盖文件系统文件或页面文件。迷恋16GB闪存驱动器可以使用几个小时?通常,央视应在15-30天后访问!请改用1 TB驱动器或NAS进行存储以用于历史记录。即使是短期的存储和转让,您也可以从SD卡中节省数年!最好还是使用32GB SD,但将文件夹的最大容量限制为16GB-使用该技术后,您的使用寿命将增加一倍以上!

– Piotr Kula
13年3月15日在10:10

@ppumkin,能否请您告诉我们您实际如何在RPi中使用SD卡?尽管供应商数量令人印象深刻,但我们中的许多人(Google的“树莓损坏的sd”)在默认Raspbian设置下都遇到了致命故障(我不止一个,包括金斯敦,现在您已经提到过)... SD,但是您的论文数据仍然没有得到证实,没有提及(我应该说是众所周知的)RPi SD问题,您自己的实际实践,或者更好的是:案例研究实验性地揭穿了SD损害“谣言”。

– Sz。
14-10-21在11:27

看,我谈论的所有内容都链接到参考。好的,您想知道我如何使用它吗?我不!因为Pi,真是个大屁股痛! SD卡不断出现故障,不是SD卡出现故障。 Pi硬件或软件正在使这些事情变砖砌。我认为这是廉价USB电源提供的不稳定电压。新的B +上装有调节器。感谢上帝!这个固定的WiFi,声音反馈,我向上帝祈祷SD卡。我仍然需要订购一些设备,但是我现在正在与Netduino一起玩,还没有SD崩溃。

– Piotr Kula
14-10-22在12:15

@ppumkin我使用了SanDisk。不是ebay的。刷新SD卡(例如,在相机中重复使用)和将其用作操作系统的宿主之间有很大的区别。您应该更具体地说明您使用它们的方式以及使用期限。我不需要重复Lunakids的评论,但我完全同意他(她)的意见。 。

– RolfBly
15年5月29日在18:27

#10 楼

如前所述,主要问题是文件和目录,在重新启动之间不值得保存,但经常被写入,例如,缓存文件,下载文件夹等。有一个名为unburden-home-dir的软件包,其主要目的是将此类文件符号链接到一个问题较小的地方,例如一个tmpfs座架或一个不易磨损的外部硬盘。

通常在登录时在X下运行,并以GUI应用程序的缓存文件为目标,但也可以从脚本等中调用并配置为用户主目录中的任意文件。

#11 楼

注意:100,000个周期的限制是适用于每个计算设备的一个假设,即使是键盘上的键也是如此。我相信在适当的冷却条件下运行Pi以及适当的关机/启动周期将提供更好的结果,而不是进行类比。 />
这也可能会增加我的上述看法。

除用户Pi [default]外,还添加一个新用户。
将新用户的主目录指向外部驱动器[缩略图/硬盘驱动器]。
授予新用户超级用户权限,并开始将其用作您的主帐户。

评论


我总是尽量少打字以节省键盘;)

– Piotr Kula
13年5月5日在15:38

添加新用户不会阻止繁忙的/ var / log和/ var / tmp。同样,从经验中获得证据表明适当的冷却会有所不同,这比说“我相信”要好得多。

– RolfBly
2015年5月29日在5:28

#12 楼

通过将syslog输出流式传输到另一台服务器,可以仅略微减少写入周期。当然,拥有运行syslogd的服务器是前提条件。但是,由于Pi是Linux爱好者的玩具,所以这种情况很可能经常发生。 :-)

要激活此流,只需在文件/etc/rsyslog.conf的顶部几乎插入一个

*.*    @myserver.mydomain


这样的语句,删除所有其他行,并通过发出service rsyslog restart重新启动日志记录。此后,消息应该在选定的服务器上。

它的一个明显的好处是,您可以轻松地与同一服务器上的其他计算机一起监视Pi。缺点之一是,在系统启动和关闭过程中,如果尚未建立网络连接或已经关闭网络连接,则可能会丢失一些消息。

评论


请注意,现代Linux系统(包括CentOS 7和Debian 8以及基于Raspbian 8的系统)会将所有日志记录到日志中,并将它们存储在systemd日志中。他们还配置了日记,以将日志转发到rsyslogd正在侦听的syslog套接字。将消息的其他副本放置在/ var / log下的日志文件中。如果您习惯使用journalctl来浏览日志(一旦熟悉,它会比/ var / log更好地工作),则可以完全禁用rsyslog并保存一些写操作。

– cjs
17年4月6日在16:29

#13 楼

使用busybox的syslog守护程序(在Raspbian / Debian / Ubuntu上的busybox-syslogd软件包中)而不是默认的syslog守护程序(通常是rsyslog)。默认情况下,在Raspbian / Debian / Ubuntu上,busybox的syslogd仅登录到内存中的环形缓冲区,而不登录到磁盘。默认情况下,环形缓冲区的大小为128kB,即旧的日志条目很快就会轮换出来,然后消失。但是,您可以配置它以使用更多的RAM。尽管如此,这比完全没有syslog守护程序要好得多,即,您仍然可以登录并读取大约的日志条目。 。使用命令logread过去几小时或几天(取决于环形缓冲区的配置大小)。您也可以使用logread -f来获得类似tail -f的行为,例如仅使用过滤器脚本存储有趣的日志条目,或仅通过其他位置通过网络转发日志条目,例如使用stunnel等。

#14 楼

我做了几件事: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)是实验性的,但是在Web上。为了真正强调这一点,我让它还播放了“ Heartbeat *”的MP4情节。它运行lighttpd,Mysql,PHP,WordPress,甚至当我远程通过网络流式传输时,它几乎也不会冒汗,平均负载约为0.2。根本没有超频。 B型转速2,上升24/7。因此,如果我可以将我的日志文件放入其他15个/ dev / ramX中,我认为我的Micro-SD 16G卡将使用几年....