开始使用zfs

前言

终于将nas的磁盘由ext4转换到了zfs,为了得到它的快照功能和读写缓存,暂时不考虑镜像和比特冗余

创建

准备一个空的磁盘设备,例如/dev/sdc2

  1. 创建zfs池 zpool create wd8t /dev/sdc2

    创建后,会自动挂载于“/wd8t”

  2. 创建子卷 zfs create wd8t/backup,子卷和分区一样,跨子卷mv文件,不是瞬间完成,而是需要完整的时长

查看

Linux EXT4 调整分区大小(压缩分区)

前言(废话)

从之前的ntfs,到后面的ext4,现在看了很多资料,和在虚拟机里体验,还是觉得zfs比较划算,我比较看重两点,1:快照,2:内存缓存

可惜我现在只有1块8T硬盘,数据没法转移,只能冒险单盘转换了,先压缩分区,将分区压缩到2.3T,然后将空出来的空间分区,并加入zpool,然后将数据从ext4转移到zfs,然后再将ext4的分区也加入到zfs池

我们开始压缩分区吧!

查看

RAID、LVM与ZFS的介绍

在本文章中,我们将讨论RAID、逻辑卷管理器(LVM)与ZFS技术,我们将介绍他们在实施中做得最​​好的一面,并检查他们的差异。我希望你就这三种技术有一个良好的基础,可以选择一个适合你项目的技术。

查看

企业软件开发中的安全问题

我们公司在开发一个面向企业内部员工的ERP系统和一个对应的VIP客户使用的客户端

今天和同事讨论到是否应该对每一个实体做授权判断以避免猜测ID攻击。

一个是发生概率*危害程度

一个是偷懒,对一个危害性小的并且了然于胸的隐患的偷懒

一个是成本,雇佣者从来没有预算这种“为了应对可能的隐患而做的工作量”,所以如果你去做了,那么这应该算作“自愿加班”
如果雇佣者明确提出了需要考虑和应对可能的安全隐患,那么我们确实需要增加预算并妥善处理它,

但是如果雇佣者的目的是如我在上一篇所说的为了完成绩效目标,
那么就完全没有必要“凭良心”来做这些额外的工作,因为企业不会为你的良心付费

Gitlab 自动部署

类似的安装教程网上遍地都是,安装过程就不讲了。
记录一下一点想法吧

缓存问题

gitlab-runner 使用my-php docker镜像编译和发布成功,但是缓存偶尔会出现remove fail问题
因为runner默认使用本地缓存,所以如果你又多个runner,它们之间不会共享编译缓存结果,导致缓存随机不生效,
这肯定不能接受啊,所以我在runner里面配置了使用s3缓存

用了minio作为缓存储存,解决了上诉问题
记得访问minio的web页面创建Bucket

查看

在公司使用 Hyper-V 运行软路由的问题

在公司需要查阅资料和安装npm包,所以研究了几年虚拟机安装软路由进行代理访问的方法,期间得到很多虚拟化和网络方面的知识,记录一下几个比较经典的问题

本文不是教程,而是笔记

NAT网卡被强制指定IP

hyper-v 的lan(内部交换机) 会自动将宿主机的接口设置成固定IP(该交换机网端),代替DHCP

每次更改为DHCP后可以拿到软路由分配的IP,但是每次重启,又会变回手动指定IP,所以开机无网络。

可以在powershell里面用这个命令创建虚拟交换机来解决

查看

使用 restic 作为备份方式

restic是用golang编写的,只需要下载预编译文件放到环境变量即可

https://restic.net/#installation

使用前:

  1. 备份前先确定一个储存方式,restic支持本地文件系统备份,或者oss之类的云储存备份,还有ftp,sftp之类的
  2. 确定一个备份密码,你的备份会被加密储存,这个不可以跳过,希望你不要忘记你的备份密码
  3. 将储存方式写到环境变量,例如~/.bashrc 或者 ~/.profile中,例如本地储存

    1
    2
    export RESTIC_REPOSITORY="/backup/restic-repo"
    export RESTIC_PASSWORD="my@backup@password"

    或者 oss (记得替换方括号和尖括号的部分)

    1
    2
    3
    4
    export RESTIC_REPOSITORY="s3:https://[oss-cn-shenzhen.aliyuncs.com]/<bucket-name>/[path]"
    export AWS_ACCESS_KEY_ID="<ACCESS_ID>"
    export AWS_SECRET_ACCESS_KEY="<ACCESS_KEY>"
    export RESTIC_PASSWORD="my@backup@password"

    不要忘记执行 source ~/.bashrc 使变量生效,或者你退出终端重新进入也行

  4. 现在,你可以执行restic init 来初始化你的储存
  5. 备份一个路径很简单,使用 restic backup /data/my-path 或者 cd /data; restic backup my-path 都是等效的,在restic中一次备份快照将被绑定到3个数据维度,host+path+time 另外还有一个可选的tag
  6. 要在crontab中定时备份,请使用这样的格式,不然restic将会找不到储存
    1
    01 6 * * * . ~/.bashrc; restic backup /path/to/my-file

注意

restic不会去备份软连接的目标文件,例如你的/etc/nginx是从/usr/local/nginx/etc 链接的

当你执行restic backup /etc/nginx 后,你将只备份了一个软连接,而不是nginx的配置文件夹

区分同步和备份

  • 同步是类似mysql的主从同步或者简单的文件同步,将一份数据多地可用,实现减少延迟或是增加QPS

  • 备份用在数据损坏时恢复:例如黑客入侵,磁盘损坏,机房故障等情况

  • 备份需要可追溯历史,因为有些故障不是当时就发现的,
    例如你发现一个用户的资料页面显示了错误字符
    怀疑可能是一年前的某次错误操作导致的,需要那时候的原始数据来核对,这时候就需要寻找历史备份

  • 备份需要增量备份节省空间,如果无法增量,就无法保存太久的历史

  • 无法用同步代替备份主要是因为同步无法追溯历史,
    另一个原因是某些数据损坏具有传染性,例如黑客篡改数据,错误的数据将会传播到每一个节点

谨慎的使用 “同步+文件版本管理” 代替备份,因为备份的回溯邀请更加类似于“快照”,而不是“版本”

本地备份能实现回溯而不能防范另外两种数据损坏

多主互相同步实现的容灾意味着,更高的维护成本和更多的问题(冲突和同步延迟) 显然是得不偿失的

《syncthing》 - 文件同步软件

安装

ubuntu:

  1. apt install syncthing
  2. 下载最新版 syncthing 替换apt安装的老旧版本 https://github.com/syncthing/syncthing/releases
  3. systemctl enable syncthing@root and systemctl start syncthing@root
  4. 修改 ~/.config/syncthing/config.xml 的 gui->address 中的 127.0.0.1 为局域网IP, 访问http://<局域网IP>:8384
  5. 使用在本机开启ssh反向代理 ssh -LN 9999:localhost:8384 <远程地址>,然后在浏览器访问 http://127.0.0.1:9999

windows:

  1. 下载安装 https://github.com/canton7/SyncTrayzor#installation
  2. 启动 SyncTrayzorPortable-x64\SyncTrayzor.exe 这里一定要注意不要搞错了,
    如果启动的 syncthing.exe 那么配置文件位置不一样,后面再切换成 SyncTrayzor.exe 会丢掉之前的配置
  3. 右键托盘菜单选择配置,勾选最下方的“随开机启动”
  4. 本机在浏览器访问 http://127.0.0.1:8384

然后在页面配置同步

鄂ICP备14007840号-1