N1盒子再体验之armbian装在笔记本硬盘上
背景
N1盒子的eMMC的读写能力不行,正好我有一块SSD移动硬盘,希望在移动硬盘上安装armbian系统。
初体验
系统下载
同前文,下载了稳定版本:Armbian_5.99_Aml-g12_Debian_buster_default_5.3.0_20191125
。地址见本文末尾的参考中。
其中 buster 是 debian 10的代号,5.3.0是内核版本,20191125是编译日期。
制作刷机U盘
- 下载一个制作启动盘的工具rufus
- windows下用rufus将下载好的
Armbian_5.99_Aml-g12_Debian_buster_default_5.3.0_20191125.img.xz
刻录到U盘中。
linux下用 xz -cd Armbian_5.99_Aml-g12_Debian_buster_default_5.3.0_20191125.img.xz > /dev/sda
来刻录到U盘中。
成功后,U盘上会有两个分区。一个较小的BOOT分区,格式是FAT,一个较大的ROOTFS分区,格式是ext4。
- 编辑 BOOT分区上的
uEnv.ini
文件
修改第一行,将路径的文件名替换为 meson-gxl-s905d-phicomm-n1.dtb
,即指定从U盘启动。
从刷机U盘启动
如果是在YYF系统的话,可以设置成为从USB启动
adb connect 盒子ip
adb shell reboot update
或者参考文末的N1盒子U盘启动工具-支持SX05RE或ARMBIAN系统
启动后,输入 lsblk
可见使用了内存盘 zram0
做为 /var/log
目录,zram1
做为 SWAP
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223.6G 0 disk
├─sda1 8:1 0 128M 0 part /boot
└─sda2 8:2 0 221.2G 0 part /
mmcblk1 179:0 0 7.3G 0 disk
mmcblk1boot0 179:32 0 4M 1 disk
mmcblk1boot1 179:64 0 4M 1 disk
zram0 253:0 0 50M 0 disk /var/log
zram1 253:1 0 901.1M 0 disk [SWAP]
禁用111端口
systemctl stop rpcbind.socket
系统优化
扩容swap
由于我用的SSD硬盘,可以适当扩容swap。
- 创建swapfile: 2GB
dd if=/dev/zero of=/mnt/swapfile bs=1M count=2048
结果
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 51.7974 s, 41.5 MB/s
- 格式化交换文件
mkswap /mnt/swapfile
mkswap: /mnt/swapfile: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=5ded1a0a-e22c-493b-9aee-afd5a50299d7
- 加载swap
chmod 0600 /mnt/swapfile
swapon /mnt/swapfile
- 写入fstab
在 /etc/fstab
末尾添加:
/mnt/swapfile swap swap defaults 0 0
删除zram的swap
- 查看现有的swap
# cat /proc/swaps
Filename Type Size Used Priority
/dev/zram1 partition 922748 0 5
或者
# swapon -s
Filename Type Size Used Priority
/dev/zram1 partition 922748 0 5
- 释放指定的swap
# swapoff /dev/zram1
- 禁用zram服务
修改文件 /etc/default/armbian-zram-config
,改为:
ENABLED=false
禁用zram的/var/log
zram的/var/log会每15分钟检查一下使用率,超过75%时会刷入eMMC磁盘。
同样,由于我用的SSD硬盘,可以禁用掉这种机制。
- 修改
/etc/default/armbian-ramlog
,如下:
ENABLED=false
- 禁用定时截断任务
修改文件 /etc/cron.d/armbian-truncate-logs
,如下:
# */15 * * * * root /usr/lib/armbian/armbian-truncate-logs
- 禁用另一个任务
修改文件 /etc/cron.daily/armbian-ram-logging
,如下:
#!/bin/sh
# /usr/lib/armbian/armbian-ramlog write >/dev/null 2>&1
- 重启服务
重启后发现,/var/log.hdd/
为空了。
禁用UAS (UASP)
UAS/UASP是一种快速的移动硬盘读取方法,但是在某些硬件上会报错,出现如下错误信息
[Apr 6 17:52] sd 0:0:0:0: [sda] tag#7 uas_eh_abort_handler 0 uas-tag 2 inflight: CMD
[ +0.000014] sd 0:0:0:0: [sda] tag#7 CDB: opcode=0x2a 2a 00 01 c9 d2 00 00 00 30 00
[ +0.023985] scsi host0: uas_eh_device_reset_handler start
[ +0.000059] usb 1-2: cmd cmplt err -2
[ +0.128099] usb 1-2: reset high-speed USB device number 2 using xhci-hcd
[ +0.151516] scsi host0: uas_eh_device_reset_handler success
这时可以通过禁用uas来解决上面的问题。编辑文件 /boot/uEnv.ini
,修改如下:
dtb_name=/dtb/amlogic/meson-gxl-s905d-phicomm-n1-new.dtb
bootargs=root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 usb-storage.quirks=1d6b:0003:u,152d:0578:u,1d6b:0002:u
其中末尾的 usb-storage.quirks=1d6b:0003:u,152d:0578:u,1d6b:0002:u
为新加入的,其中的A1:A2:u, A3:A4:u, A5:A6:u中的Axx系统,对应于 lsusb
中的结果
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp. JMS567 SATA 6Gb/s bridge
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
重启后,可以发现已经不现使用uas驱动了。
$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/0p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/2p, 480M
|__ Port 2: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 480M
禁用服务自启动
systemctl disable dnsmasq
systemctl disable docker
修改MAC地址
armbian的MAC地址是固定的b8:27:eb:74:f2:6c
。如果一个局域网内有两个N1盒子,装了armbian系统的话,之间会发生冲突。推荐使用FixWlanMAC.sh
脚本来修复,具体如下:
#!/bin/bash
#update:2019-11-11
#author:alon2000
#LAN_MAC=`ifconfig eth0 | grep -w ether | awk '{print $2}'`
LAN_MAC=`cat /sys/class/net/eth0/address`
MAC_HEAD=`echo $LAN_MAC|cut -c1-15`
MAC_TAIL=`echo $LAN_MAC|cut -c16-17`
MAC_TAILn=$((16#${MAC_TAIL}-1))
WLAN_MAC="$(printf '%s%02x\n' $MAC_HEAD $[MAC_TAILn])"
if [[ -f "/lib/firmware/brcm/brcmfmac43455-sdio.phicomm,n1.txt" ]] ; then
sed -i -e "s/^macaddr=b8:27:eb:74:f2:6c$/macaddr=$WLAN_MAC/" \
"/lib/firmware/brcm/brcmfmac43455-sdio.phicomm,n1.txt"
fi
if [[ -f "/lib/firmware/brcm/brcmfmac43455-sdio.txt" ]] ; then
sed -i -e "s/^macaddr=b8:27:eb:74:f2:6c$/macaddr=$WLAN_MAC/" \
"/lib/firmware/brcm/brcmfmac43455-sdio.txt"
fi
echo "WiFi MAC address modified successfully! reboot..."
reboot