轶哥博客

妄图改变世界的全栈程序员。

记一次服务器启动修复 - /etc/fstab错误至系统无法启动

利用RK3399作为ARM微型服务器是非常有趣的事情。然而总有一些意外来得令人措手不及。

事情是这样的。我在服务器中挂载了三块SSD硬盘,其中两块是放于USB硬盘盒,通过Type-C和USB3.0接口连接。

开机自动挂载

我们先看一下开机自动挂载方案。

查询分区的Block ID:

blkid /dev/sda1
/dev/sda1: UUID="7f50f85e-783c-4d94-be37-d2c662504e58" TYPE="ext4"

然后把 Block ID 添加到/etc/fstab文件中,这是我的fstab文件:

UUID=a848d601-91ac-4b5c-8ce3-ffef674f5dd5 /nvme ext4 defaults 0 0
UUID=88eb8df2-1a8f-4f38-acc9-566deb1c8f40 /tf ext4 defaults 0 0
UUID=7f50f85e-783c-4d94-be37-d2c662504e58 /ssd0 ext4 defaults 0 0
UUID=e66307fc-2c33-406b-ae60-b27e2344d02a /ssd1 ext4 defaults 0 0

事情是这样开始的

我在检查硬盘状态的时候,发现其中一块硬盘没有进行4k对齐。然后我对该硬盘进行了重新分区。结果服务器就卡死了!😂

当我重启服务器后,一直连不上SSH。

插入HDMI,显示器一片黑暗!

如果是X86架构的服务器,挂载/etc/fstab失败后会进入高级模式,可以通过接入显示器解决,但是ARM架构(或者说我这块板子)的系统并没有提供这样的后悔药。

x86系统可以进入光盘Linux,然后挂载硬盘改写/etc/fstab文件。但是我的系统烧写在eMMC,即便能在SD卡刷机,通过SD卡引导系统并挂载eMMC硬盘也是非常有挑战的事情。

配置自动续期的免费通配符SSL证书

公益SSL证书机构Let’s Encrypt从2018-03-13起开始支持通配符证书。通配符证书必须通过DDNS添加TXT记录验证域名所属权。

  1. certbot官网安装certbot。

  2. 安装DNS插件

    cerbot支持很多DNS插件,例如:

     certbot-dns-cloudflare
     certbot-dns-cloudxns
     certbot-dns-digitalocean
     ...

    这里以DNSPOD(腾讯云域名默认DNS)为例:

     git clone https://github.com/tengattack/certbot-dns-dnspod
     cd certbot-dns-dnspod
     sudo python setup.py install
Nginx 解决API跨域问题

利用Nginx可以最简单且高效解决跨域问题。

跨域是前后端分离开发中非常常见的问题。这个问题网上已经有非常多的答案,但大部分是编程框架里面添加CORS头。但无论用什么Web框架,现已很难离开Nginx。因此直接在Nginx中处理跨域问题有得天独厚的优势,可以将OPTIONS请求拦截在API服务之前,节约服务器开销。

简单说,跨域分为简单跨域复杂跨域

简单跨域不会发送OPTIONS请求。

复杂跨域会发送一个预检查OPTIONS请求。

复杂跨域的条件是:

  1. 非GET、HEAD、POST请求。
  2. POST请求的Content-Type不是application/x-www-form-urlencoded, multipart/form-data, 或text/plain
  3. 添加了自定义header,例如Token

跨域请求浏览器会在Headers中添加Origin,通常情况下不允许用户修改其值。

基于Docker部署Node.js应用环境

  利用Docker部署的服务器环境已经成为目前主流。为了实现高负载、易于拓展,我们采用Nginx作为反代,Redis记录访问日志。(主机服务器环境:CentOS7.3,2017年05月02日19:57:08更新)

1、安装并启动Docker

1. 设置仓库

  在CentOS中设置Docker CE的仓库地址。

sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

sudo yum makecache fast
Ubuntu引导错误修复 - EFI

  如果安装ubuntu后启动报错:“Reboot and Select proper Boot device or Insert Boot Media in selected Boot device”。(Ubuntu 16.04)解决方案:插上U盘或CD,进入Try Ubuntu模式。使用sudo fdisk -l查看你的Ubuntu安装在哪里。例如:/dev/sda1,对应修改以下命令执行。注意:不要选择EFI分区!

sudo mount /dev/sda1 /mnt
sudo apt-get update
sudo apt-get install grub

  接下来修复引导:

sudo grub-install /dev/sda --root-directory=/mnt
使用U盘安装Ubuntu 16.04

制作启动U盘启动盘

  先找一个8G及以上大小的U盘。

  下载并安装UltraISO,如图选择“打开”,选择安装镜像(本文使用Ubuntu 16.04)。

  更多内容请点击下方阅读全文按钮。

Ubuntu引导错误修复 - i386

  如果在制作Ubuntu To Go或安装Ubuntu出现“error: file '/grub/i386-pc/normal.mod' not found”的报错,可以进入LiveCD模式进行引导的安装。

  插上U盘或CD,进入Try Ubuntu模式。

  上一页下一页