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

背景

之前写过,我在家里用了一台旧的工作站笔记本做了服务器,连上一个绿联的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做了一个家庭内网的主页,这块内容,我打算写到家庭网络升级中
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从0入门自主空中机器人-2-1【无人机硬件框架】

关于本课程: 本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程,包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程,带你从0开始,组装属于自己的自主无人机,并让…

剑指Offer|LCR 013. 二维区域和检索 - 矩阵不可变

LCR 013. 二维区域和检索 - 矩阵不可变 给定一个二维矩阵 matrix,以下类型的多个请求: 计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。 实现 NumMatrix 类: NumMatrix(…

接口Mock技术介绍

相信学习过程序设计的读者朋友们,一定对“桩(Stub)”这个概念并不陌生。它是指用来替换一部分功能的程序代码段。桩程序代码段可以用来模拟已有程序的某些功或者是将实现的系统代码的一种临时替代方法。插桩方法被广泛应用于开发和测试工作中…

深入解析C#异步编程:await 关键字背后的实现原理

在C#中,async 和 await 关键字用于编写异步代码。本文将详细介绍 await 的实现原理,包括状态机的生成、回调函数的注册和触发等关键步骤。 1. 异步方法的基本概念 在C#中,async 关键字标记一个方法为异步方法,而 await 关键字用于…

【机器学习】SVM支持向量机(一)

介绍 支持向量机(Support Vector Machine, SVM)是一种监督学习模型,广泛应用于分类和回归分析。SVM 的核心思想是通过找到一个最优的超平面来划分不同类别的数据点,并且尽可能地最大化离该超平面最近的数据点(支持向量…

Unity功能模块一对话系统(1)前置准备

也许你也曾被游戏中的对话系统深深吸引,那些精心设计的对白、鲜活的角色配音、甚至是简单的文字对话,往往能让玩家产生强烈的代入感和情感共鸣。如果你正在开发一款游戏,或者计划为你的项目加入一个引人入胜的对话系统,那么 Unity…

upload-labs关卡记录10

白名单,可以看到已经进行了限制,只能上传这三种后缀的文件,先试一试MIME绕过: 果然不行:观察到是post型,试一试00绕过:没找到路径,绕过失败。 看源码吧: $is_upload f…

专业140+总分410+南京大学851信号与系统考研经验南大电子信息通信集成电路,真题,大纲。参考书。

本人本科中等211,离保送本校差一点,考研前纠结本校还是追求更高目标,和家人聊了自己的想法,感谢父母对我的支持,坚定报考南大的目标,最终专业851信号与系统140,总分410顺利被南京大学录取&#…

《机器学习》——KNN算法

文章目录 KNN算法简介KNN算法——sklearnsklearn是什么?sklearn 安装sklearn 用法 KNN算法 ——距离公式KNN算法——实例分类问题完整代码——分类问题 回归问题完整代码 ——回归问题 KNN算法简介 一、KNN介绍 全称是k-nearest neighbors,通过寻找k个距…

Spring Boot 学习笔记

学习代码第一步&#xff1a;如何写 Hello world &#xff1f; 1、新建项目 新建一个 Maven Java 工程&#xff0c;在 pom.xml 文件中添加 Spring Boot Maven 依赖&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spri…

基于python的扫雷游戏

游戏 游戏目标&#xff1a; 揭开所有非地雷的格子。 如果揭开地雷&#xff0c;游戏失败。 使用标记功能&#xff08;&#x1f6a9;&#xff09;来标记可能的地雷位置。 格子类型&#xff1a; 空白格子&#xff1a;表示周围没有地雷。 数字格子&#xff1a;显示周围 8 个格子…

【K8S系列】深入解析K8S服务的无状态与有状态

在容器编排领域&#xff0c;Kubernetes&#xff08;K8S&#xff09;无疑是占据主导地位的工具。它提供了强大的功能来管理和部署容器化应用程序&#xff0c;其中服务分类是理解和有效使用K8S的关键。K8S中的服务主要分为无状态服务和有状态服务&#xff0c;这两种类型在基础概念…

Linux第100步_Linux之设置LCD作为终端控制台和LCD背光调节

KMS是Kemmel Mode Setting的缩写&#xff0c;内核显示模式设置。它主要负责显示的控制&#xff0c;包括屏幕分辨率、屏幕刷新率和颜色深度等等。 CRTC是指显示控制器&#xff0c;在DRM里有多个显存&#xff0c;通过操作CRTC来控制要显示那个显存。 KMS包含了FB框架。DRM驱动默…

3_TCP/IP连接三次握手与断开四次挥手

TCP/IP 通信是网络通信的基础协议&#xff0c;分为以下主要步骤&#xff1a; 1、建立连接&#xff08;三次握手&#xff09; 目的&#xff1a;保证双方建立可靠的通信连接。 过程&#xff1a; 1>客户端发送 SYN&#xff1a;客户端向服务器发送一个 SYN&#xff08;同步&…

SpringCloud 系列教程:微服务的未来(三)IService接口的业务实现

本文将介绍 IService 接口的基本业务操作、复杂业务操作、Lambda 方法的使用以及批量增加操作&#xff0c;帮助开发者深入了解如何高效地利用 MyBatis-Plus 提供的功能进行数据库操作。无论是简单的单表查询&#xff0c;还是复杂的多表联动&#xff0c;甚至是大数据量的批量操作…

kubernetes学习-集群搭建部署(一)

一、开三台虚拟机进行试验&#xff08;centos7) 1、初始操作 # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld# 关闭selinux sudo sed -i s/enforcing/disabled/ /etc/selinux/config # 永久 setenforce 0 # 临时# 关闭swap sudo swapoff -a # 临时 s…

【AUTOSAR 基础软件】Can模块详解(Can栈之驱动模块)

文章包含了AUTOSAR基础软件&#xff08;BSW&#xff09;中Can模块相关的内容详解。本文从AUTOSAR规范解析&#xff0c;ISOLAR-AB配置以及模块相关代码三个维度来帮读者清晰的认识和了解Can驱动软件模块。文中涉及的ISOLAR-AB配置以及生成的ARXML均依托于ETAS工具链&#xff0c;…

Vite内网ip访问,两种配置方式和修改端口号教程

目录 问题 两种解决方式 结果 总结 preview.host preview.port 问题 使用vite运行项目的时候&#xff0c;控制台会只出现127.0.0.1&#xff08;localhost&#xff09;本地地址访问项目。不可以通过公司内网ip访问&#xff0c;其他团队成员无法访问&#xff0c;这是因为没…

【maven】什么是坐标(依赖)继承与模块、web项目启动访问

目录 2. Maven 基础 2.1 坐标 2.1.0 什么是坐标&#xff08;依赖&#xff09; 2.1.1 获得坐标 2.1.2 使用坐标 2.1.3 依赖范围 2.1.4 依赖传递 2.1.5 依赖冲突&调节原则 2.1.6 依赖排除 2.1.7 使用第三方jar包 2.2 继承与模块 2.2.1 概述 2.2.2 分析 2.2.3 实…

【面试系列】深入浅出 Spring Boot

熟悉SpringBoot&#xff0c;对常用注解、自动装配原理、Jar启动流程、自定义Starter有一定的理解&#xff1b; 面试题 Spring Boot 的核心注解是哪个&#xff1f;它主要由哪几个注解组成的&#xff1f;Spring Boot的自动配置原理是什么&#xff1f;你如何理解 Spring Boot 配置…