折腾日记:如何让吃灰笔记本发挥余热——搭建一个相册服务

背景

之前写过,我在家里用了一台旧的工作站笔记本做了服务器,连上一个绿联的5位硬盘盒实现简单的网盘功能,然而,还是觉的不太理想,比如使用filebrowser虽然可以备份文件和图片,当使用手机使用网页,由于网页无法获到实况图片的视频文件,上传到硬盘后就丢失了实况图片,所以就继续折腾一下

使用环境

  1. mdadm:实现软raid的软件
  2. mt photos :备份照片的客户端
  3. 4T机械盘两张
  4. Ubuntu服务器

软raid

首先既然要备份家里的图片,那就要搞个raid,保证至少可以做到镜像备份,这里推荐使用mdadm实现软raid
将需要实现raid两个磁盘插入单硬盘盒里面,接上笔记本

df -h

查看磁盘的挂载路径,如图,可以看到有个3.5T磁盘挂载到了raid1路径上,这里的md1实际上是两张磁盘

在这里插入图片描述

使用
lsblk
指令就看sdc sddraid1
在这里插入图片描述

这是我之前已经完成了软raid的配置,接下来就看看如何用指令去实现

第一步 安装mdadm
sudo apt update
sudo apt install mdadm
第二步 使用上一步的指令lsblk查看我们挂载的两个磁盘的name

在这里插入图片描述

第三步 构建raid1
sudo mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/sdc /dev/sdd

这条命令将创建一个名为md0的RAID 1设备,使用/dev/sdb1/dev/sdc1两个分区作为其成员。

命令解释 - 这是一个使用mdadm工具创建磁盘阵列的命令。
mdadm --create:这是创建磁盘阵列的主要指令部分。
--create选项告诉mdadm要创建一个新的磁盘阵列。
--verbose:这个选项用于在创建过程中显示详细的信息,这样你可以看到阵列创建的每一个步骤和相关的参数设置情况。
mdadm首先会对指定的磁盘(/dev/sdc/dev/sdd)进行检查,确保它们适合构建磁盘阵列。如果磁盘上已经有数据,可能会提示你数据将会丢失(这取决于磁盘的状态和已有数据情况)然后,它会开始创建RAID1阵列。
--verbose选项的作用下,可以看到构建的详情

mdadm: layout defaults to left - symmetric mdadm: chunk size defaults to 512K mdadm: /dev/sdc appears to be part of a raid array: level=raid1 devices=2 ctime=Thu, 01 Jan 1970 00:00:00 GMT mdadm: /dev/sdd appears to be part of a raid array: level=raid1 devices=2 ctime=Thu, 01 Jan 1970 00:00:00 GMT mdadm: partition table exists on /dev/sdc but will be lost or meaningless after creating array mdadm: partition table exists on /dev/sdd but will be lost or meaningless after creating array mdadm: size set to 1000215296K mdadm: automatically enabling write - intent bitmap on large array mdadm: creating array /dev/md1 with level=raid1, num - devices=2 mdadm: device /dev/sdc assumed to be in clean state mdadm: device /dev/sdd assumed to be in clean state mdadm: array /dev/md1 started.

保存 RAID 配置

执行指令,保存mdadm的配置

mdadm -D --scan > /etc/mdadm.conf

创建成功后,系统会将/dev/md1作为一个新的磁盘设备看待,就像对普通磁盘一样对它进行格式化(如mkfs.ext4 /dev/md1将其格式化为ext4文件系统),挂载操作(如mount /dev/md1 /raid1将其挂载到/raid1目录),以便查看操作
比如,我就是永久挂载raid1目录下,使用上会有点问题,开机的时候,要是磁盘盒没有插入的话,由于无法加载到磁盘,就会无法进入系统

实现挂载

在这里插入图片描述

  1. 在根目录创建一个文件夹
mkdir raid1
  1. 查看硬盘id
blkid /dev/md1

获取到硬盘的uuid、类型等信息

在这里插入图片描述

  1. 添加挂载配置

编辑/etc/fstab文件,添加硬盘信息

vim /etc/fstab
UUID=ae596716-0794-4f54-8ae5-1f1768ae732f /raid1  xfs defaults 0 0
  1. 检查挂载
sudo mount -a

如果没有报错信息,就证明硬盘被永久挂载到指定目录

当完成这些操作过,我们的raid1就实现了,可以将其中一个主磁盘标记为故障,然后查看能不能访问备份的磁盘,然后重启恢复,看从备份写入的东西,会不会同步到,回到主磁盘

测试备份

查看状态
 mdadm -D /dev/md1

在这里插入图片描述

可以看到目前的状态是clean,也就是正常
mdadm --manage /dev/md1 --fail /dev/sdc来标记/dev/sdc为故障状态

模拟故障

在这里插入图片描述

测速同步文件

我们在磁盘中加个文件,然后在重启恢复正常,查看文件是否已经从备份同步到

在这里插入图片描述

重启后

在这里插入图片描述

可以看到磁盘恢复正常后,文件也从备份同步到了主磁盘中

相册应用

mt-photos

完成这些配置后,就开始需要实现我们的相册备份了,
这里我使用了mt-photos 作为客户端,相比较其他软件,mt-photos

  1. 本土化方面,相比较其他相册管理软件,操作简单
  2. 更新及时,可以加群,开发者有问必答
  3. 功能比较丰富,支持图片格式很多,连我的相机的raw格式也支持
  4. 多端支持,客户端包括网页和移动端(安卓和IOS)
  5. 它的相册创建模式和添加文件夹的操作一致,不用考虑脱离软件,照片无法查看的问题
  6. 最主要原因可以使用docker构建,构建简单
    唯一的问题这是一个买断制的应用,99块钱终身(现在128一个月),可以免费试用一个月

搭建mt-photos服务

拉取镜像
docker pull mtphotos/mt-photos:latest
创建应用的文件夹
mkdir /usr/local/mtphotos/config
mkdir /usr/local/mtphotos/upload
创建服务
docker run -d \--name="mt-photos" \
-v /usr/local/mtphotos/config:/config \
-v /raid1/upload/photos:/upload \
-v /raid1/刘浩/photos:/lh \
-p 8163:8063 \
-e TZ="Asia/Shanghai" \
--restart="unless-stopped" \
mtphotos/mt-photos:latest
登陆相册

等应用创建完,登陆网页进行配置
在这里插入图片描述

查看相册

在这里插入图片描述

更多功能可以参考官网文档 ,个人觉得他们的文档还是很丰富的

移动端登陆

在这里插入图片描述

题外话

既然,家里都有服务器了,那使用ip访问服务器还是不太方便
所以,在家自建一个dns服务需求就出现,一开始我是使用了树莓派安装smartdns作为dns服务器(主路由器的dns配置为树莓派地址)使用了几个月,后面觉得有点臃肿
目前,我采用软路由做主路由作为网关,在软路由上设置home.kura.ren的指向到笔记本做的服务器上,在服务器上配置了nginx进行了转发,如图还使用 sun-panel做了一个家庭内网的主页,这块内容,我打算写到家庭网络升级中
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用seata实现分布式事务管理

配置 版本说明:springCloud Alibaba组件版本关系 我用的是spring cloud Alibaba 2.2.1.RELEASE 、springboot 2.2.1.RELEASE、nacos 2.0.1、seata1.2.0,jdk1.8 seata 主要用于在分布式系统中对数据库进行事务回滚,保证全局事务的一致性。 seata的使用…

【总结】动态规划

线性dp LeetCode题单, 从记忆化搜索到递推 Pre: 从最初状态到最终状态等价,那么从最终状态开始和最初状态开始结果一样。 递归时不会产生其他负面结果,即无论何时进入递归,只要递归参数相同,结果就相同。 …

RabbitMQ中的异步Confirm模式:提升消息可靠性的利器

在现代分布式系统中,消息队列(Message Queue)扮演着至关重要的角色,它能够解耦系统组件、提高系统的可扩展性和可靠性。RabbitMQ作为一款广泛使用的消息队列中间件,提供了多种机制来确保消息的可靠传递。其中&#xff…

买卖预测工具

设计一个用于在交易市场中寻找确定性或大概率盈利的买卖预测工具是一个具有挑战性但非常有潜力的项目。你可以通过以下几个步骤进行思路规划: 1. 明确目标 大概率盈利:工具的目的是找出大概率盈利的交易机会。不能完全依赖于100%确定性,因为…

【数据结构】数据结构简要介绍

数据结构是计算机科学中用于组织、管理和存储数据的方式,以便于高效地访问和修改数据。 数据结构的分类: 数据结构可以大致分为两类:线性结构和非线性结构。 1. 线性结构 线性结构中的数据按顺序排列,每个元素有唯一的前驱和后…

note 41:账务系统开发规范

目录 系统设计 防重控制 流量控制 并发控制 异常处理 备份机制 系统开发​​​​​​​ 前端队列操作 外系统交互 ​​​​​​​​​​​​​​ 系统设计 防重控制 对于进入到系统中的数据(文件导入、手工录入、系统直连等)以及本系统发往外…

Circular Spanning Tree(树的性质)

Circular Spanning Tree 本道题目加深理解树的性质: 思路: 首先考虑什么情况是NO,那么不难想当字符串全是0的时候一定是不行的,因为这样就构成环了,还有一种情况是1的个数为奇数的时候是不行的,一棵树中为…

linux安装nginxs报错:openssl not found

系统: linux 版本:centOS7 nginx版本:nginx-1.20.2 linux安装nginx时 执行下面命令时报错: ./configure --with-http_stub_status_module --with-http_ssl_module --prefix/usr/local/nginxchecking for OpenSSL library ... not …

【论文笔记】Contrastive Learning for Sign Language Recognition and Translation

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Contrastive Learning for…

docker redis安装

一.镜像拉取 docker pull redis:5.0新建文件 touch /home/redis/redis.conf touch /home/redis/redis_6379.pid # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 #bind 127.0.0.1protected-mode noport 6379tcp-backlog 511requirepass roottimeout 0tcp-keepali…

【CSS in Depth 2 精译_096】16.4:CSS 中的三维变换 + 16.5:本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第五部分 添加动效 ✔️【第 16 章 变换】 ✔️ 16.1 旋转、平移、缩放与倾斜 16.1.1 变换原点的更改16.1.2 多重变换的设置16.1.3 单个变换属性的设置 16.2 变换在动效中的应用 16.2.1 放大图标&am…

小程序租赁系统开发的优势与实践探索

内容概要 小程序租赁系统开发正在引起广泛关注,特别是在数字化快速发展的今天。很多企业开始意识到,小程序不仅能为他们带来更多的客户,还能极大地提高管理效率。借助小程序,用户在租赁时可以更加方便地浏览和选择产品&#xff0…

机器人C++开源库The Robotics Library (RL)使用手册(二)

由于RL库采用跨平台CMake源码,可以轻松在win、ubantu等平台部署、编译,win通常用VS编译器,为了便于使用、阅读,需要将CMake编译成VS工程。 1、准备三个工具:CMake、VS、QT 为了在Windows上编译RL和依赖项,您需要安装一个编译器(例如。,Visual Studio 2017)和跨平台构…

如何在LabVIEW中更好地使用ActiveX控件?

在LabVIEW中,ActiveX控件可以帮助实现与其他应用程序或第三方组件的集成(例如Microsoft Excel、Word、Internet Explorer等)。以下是一些建议,帮助您更好地在LabVIEW中使用ActiveX控件: ​ 1. 理解ActiveX控件的基本原…

如何使用Python从SACS结构数据文件中提取节点数据信息并导出到EXCEL

在现代工程设计中,结构分析和数据处理是不可或缺的一部分。特别是在海洋工程、桥梁建设等领域,SACS文件被广泛应用。这种文件格式包含了结构模型的各种重要信息,包括节点(JOINT)、构件(ELEMENT)…

如何判断一个学术论文是否具有真正的科研价值?ChatGPT如何提供帮助?

目录 1.创新性与学术贡献的超级加分✔ 2.科研过程中的各个环节—从0到1✔ 3.创新性与理论深度的完美结合✔ 4.论证与写作的清晰性✔ 5.数据整理和文献回顾——效率与精准并存✔ 6.创新性要求辅助✔ 总结 宝子们,学术论文写作的旅程是不是感觉像是走进了迷雾森…

学习threejs,THREE.CircleGeometry 二维平面圆形几何体

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.CircleGeometry 圆形…

【微服务】SpringBoot 自定义消息转换器使用详解

目录 一、前言 二、SpringBoot 内容协商介绍 2.1 什么是内容协商 2.2 内容协商机制深入理解 2.2.1 内容协商产生的场景 2.3 内容协商实现的常用方式 2.3.1 前置准备 2.3.2 通过HTTP请求头 2.3.2.1 操作示例 2.3.3 通过请求参数 三、SpringBoot 消息转换器介绍 3.1 H…

深入理解Composer自动加载机制

Composer是PHP生态系统中最常用的依赖管理工具之一,它不仅能够帮助开发者管理项目的依赖关系,还能够自动加载这些依赖项。自动加载机制是Composer的核心功能之一,通过自动加载,开发者可以在运行时按需加载所需的类和文件&#xff…

【游戏设计原理】35 - 委员会设计

一、 分析并总结 核心内容 定义:委员会设计(Design by Committee)是指游戏开发团队通过集体协作完成设计,这种模式结合了多样化的创意和个体专长,但也可能因缺乏一致性而导致设计的混乱。优势:多样性带来…