减少树莓派系统读写次数:用relatime挂载选项

SD卡和普通的磁盘驱动器有很多不同的地方,SD卡可以执行写和擦除的周期的次数是有限的,然而传统的磁盘驱动器没有写和擦除周期的概念。

什么是写和擦除周期?

对于一个普通的磁盘驱动器,每当你往磁盘里写东西,磁盘的某个扇区就会改变它的磁盘状态。这是磁盘物理上的改变,它不会给磁盘圆片本身带来损耗。当我们读取磁盘片上同一扇区的数据时,磁盘片的性质也不会发生改变。而SD卡显然是没有磁盘片,但是SD卡有小的内存芯片,其中包含内存单元,数据储存在内存单元上,就像物理硬盘的扇区一样。

和物理硬盘不一样,当你读写内存单元时,它的状态就发生了改变。

这是因为闪存单元使用不量的存储电荷来表示数据的比特位,这就是写和擦除的来源:

每当你读或写闪存单元一次,这个单元 的周期就消耗一次。读写闪存的时候,状态随之改变,每一个闪存单元只有限的周期,这些周期消耗完之后,状态再也无法改变(无法写入).

一般的SD卡会有10万次写和擦除周期,相对于数码相机来算是很多了,不过相对于日志文件系统就显得不足了,日志文件系统会非常频繁地往SD卡内写入少量的数据。除此外,每当系统更新文凭或目录时,也会往磁盘写数据,所以,10万次的周期是远远不够用的,因此,我们要关闭自动更新文件存取时间的功能,关闭自动更新文件存取时间的功能可以通过以下两种方式实现:

1. 第一个是noatime选项,它会禁止更新文件存取时间,这对闪存单元来说是好事,但是对用户来说并不是好事,比如说你想知道你的文件的时间戳,又比如有些应用程序依赖于文件的存时间戳。

2. 为了在两个极端中取一个平衡点,可以使用relatime挂载选项,relatime选项只有当最新修改时间比当前存取时间新的时候才会更新文件时间。这个选项减少了大量的闪存单元写操作,用户可以编辑/etc/fstab文件启用这个选项将你的根文件系统(/)以及启动文件系统(/boot)的挂载选项修改成如下所示的样子:

/dev/mmcblkop1 / auto defaults,relatime 1 1

/dev/mmcblkop1 /boot auto defaults,relatime 1 2

首先重新挂载每个文件系统:

#mount –o remount / && mount –oremount /boot

然后使用mount命令检查relatime是否启用:

#mount
它会显示所有挂载的文件系统经以及它他们的挂载选项。

树莓派上的软件安装和卸载命令汇总

基础命令

安装软件 apt-get install softname1 softname2 softname3……
卸载软件 apt-get remove softname1 softname2 softname3……
卸载并清除配置 apt-get remove –purge softname1
更新软件信息数据库 apt-get update
进行系统升级 apt-get upgrade
搜索软件包 apt-cache search softname1 softname2 softname3……

安装deb软件包 dpkg -i xxx.deb
删除软件包 dpkg -r xxx.deb
连同配置文件一起删除 dpkg -r –purge xxx.deb
查看软件包信息 dpkg -info xxx.deb
查看文件拷贝详情 dpkg -L xxx.deb
查看系统中已安装软件包信息 dpkg -l
重新配置软件包 dpkg-reconfigure xxx

清除所有已删除包的残馀配置文件

dpkg -l |grep ^rc|awk ‘{print $2}’ |sudo xargs dpkg -P

如果报如下错误,证明你的系统中没有残留配置文件了,无须担心。
dpkg: –purge needs at least one package name argument

dpkg安裝的可以用apt卸載,反之亦可。

aptitude 命令

aptitude 与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude 在处理依赖问题上更佳一些。举例来说,aptitude 在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。以下是笔者总结的一些常用 aptitude 命令,仅供参考。

aptitude update 更新可用的包列表
aptitude upgrade 升级可用的包
aptitude dist-upgrade 将系统升级到新的发行版
aptitude install pkgname 安装包
aptitude remove pkgname 删除包
aptitude purge pkgname 删除包及其配置文件
aptitude search string 搜索包
aptitude show pkgname 显示包的详细信息
aptitude clean 删除下载的包文件
aptitude autoclean 仅删除过期的包文件

当然,你也可以在文本界面模式中使用 aptitude。

常用apt命令列表

apt-cache search # ——(package 搜索包)
apt-cache show #——(package 获取包的相关信息,如说明、大小、版本等)
sudo apt-get install # ——(package 安装包)
sudo apt-get install # —–(package – – reinstall 重新安装包)
sudo apt-get -f install # —–(强制安装?#”-f = –fix-missing”当是修复安装吧…)
sudo apt-get remove #—–(package 删除包)
sudo apt-get remove – – purge # ——(package 删除包,包括删除配置文件等)
sudo apt-get autoremove –purge # —-(package 删除包及其依赖的软件包+配置文件等(只对6.10有效,强烈推荐))
sudo apt-get update #——更新源
sudo apt-get upgrade #——更新已安装的包
sudo apt-get dist-upgrade # ———升级系统
sudo apt-get dselect-upgrade #——使用 dselect 升级
apt-cache depends #——-(package 了解使用依赖)
apt-cache rdepends # ——(package 了解某个具体的依赖?#当是查看该包被哪些包依赖吧…)
sudo apt-get build-dep # ——(package 安装相关的编译环境)
apt-get source #——(package 下载该包的源代码)
sudo apt-get clean && sudo apt-get autoclean # ——–清理下载文件的存档 && 只清理过时的包
sudo apt-get check #——-检查是否有损坏的依赖

本文来自:树莓派实验室

容器操作系统HypriotOS在树莓派3上的安装

HyproitOS是一款容器操作系统,可以在任何支持Raspberry Pi系列的设备上运行,能让你在五分钟内从0到Docker。

选择HypriotOS的原因是因为其对Docker的支持已经很完善,且有丰富参考资料减少了很多弯路。前期在使用cubieboard进行测试时发现自带镜像文件内核版本太低需要自行编译,后期才找到一个第三方的安装地址,有时间另行介绍。

镜像文件

访问:https://blog.hypriot.com/downloads/ 下载最新版本的镜像文件。

也可以通过我的分享来下载:

http://pan.baidu.com/s/1nvEwhkP
密码:vip6

读卡器一个
镜像写入软件
Windows下的Win32 Disk Imager软件(上面共享盘里有)
Linux、Mac下flash tools安装(推荐)

curl -O https://raw.githubusercontent.com/hypriot/flash/master/$(uname -s)/flash

chmod +x flash

sudo mv flash /usr/local/bin/flash

使用

写入镜像后将内存卡放入树莓派并重启。用户名:pirate 密码:hypriot

如果你是用flash写入的话在可以在写入命令行前加入 –hostname 这样就不需要显示器了,或者像有的资料介绍的通过nmap或其它扫描工具来发现设备。仅需要执行如下命令就可以直接连接设备。

比如我写入的命令如下:

#注意下载的ZIP包不要解压
flash –hostname pi0 hypriotos-rpi-v1.1.3.img.zip

由于我设置的hostname为pi0,那么我的ssh登录命令如下:

#这里的pirate用户为hypriotos默认登录用户
#此登录方式要登录设备与树莓派在一个网段

ssh pirate@pi0.local

通过上面的ssh命令不需要知道IP的情况下即可登录。

更新系统

sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get dis-upgrade -y

以上通过更新对系统打补丁及安装各软件最新版本,然后通过安装rasip-config可以用图形化界面进行配置。

sudo apt-get install raspi-config

Docker安装

sudo apt-get install docker.io

测试

docker run -d -p 80:80 hypriot/rpi-busybox-httpd

如果国内访问不正常,可以这样。

wget http://soft.sunsl.net/dev/armhf/rpi-busybox-httpd.tar
docker load -i rpi-busybox-httpd.tar

成功后你应该能通过浏览器访问到如下界面:

作者:forrestsun
來源:https://www.jianshu.com/p/3e2a901e66b7

想要更多,请关注“IoT前哨站”微博或微信公众号