技术积累
日进一寸

chatgpt每日一问:详解/etc/fstab

imajeason阅读(25)

/etc/fstab 是 Linux 系统中用于定义文件系统挂载点的配置文件。它提供了一种自动化的方式来在系统启动时挂载分区和设备,并指定挂载选项。以下是对其详解:


文件位置和格式

文件路径:
/etc/fstab

每行定义一个文件系统的挂载信息,格式如下:

<file system>  <mount point>  <type>  <options>  <dump>  <pass>

字段详解

1. <file system>

表示设备或文件系统源,可以是以下几种形式:

  • 设备文件:如 /dev/sda1/dev/nvme0n1p1
  • UUIDUUID=xxxx-xxxx-xxxx-xxxx,唯一标识分区,可通过 blkid 命令获取。
  • 标签LABEL=label_name,分区的自定义标签。
  • 网络文件系统:如 server:/path(NFS)。
  • 伪文件系统:如 proctmpfs

2. <mount point>

文件系统要挂载到的路径:

  • 示例://boot/home/mnt/data
  • 如果填写 none,表示不挂载(常用于交换分区 swap)。

3. <type>

文件系统类型,如:

  • ext 系列ext4ext3ext2
  • XFSbtrfs:现代文件系统。
  • swap:用于交换分区。
  • vfat:FAT 文件系统(如 U 盘)。
  • ntfs:Windows 文件系统。
  • proc:伪文件系统。
  • tmpfs:基于内存的文件系统。

4. <options>

挂载选项,用逗号分隔,常见选项包括:

  • 默认选项defaults(rw、suid、dev、exec、auto、nouser、async)。
  • 只读ro(read-only)。
  • 读写rw
  • 延迟写入async
  • 同步写入sync
  • 用户挂载usernouser
  • 不检查设备noauto
  • 挂载时禁用设备文件nodev
  • 禁用执行权限noexec
  • 挂载时禁用 SUID/SGIDnosuid

某些文件系统有特定选项,比如:

  • NFSrw,vers=4,soft(版本 4,允许软挂载)。
  • btrfssubvol=volume_name(指定子卷)。

5. <dump>

备份选项:

  • 0:不进行备份。
  • 1:在 dump 工具中标记为需要备份。

6. <pass>

文件系统检查顺序:

  • 0:不检查。
  • 1:引导分区(通常是 /)先检查。
  • 2:其他分区按顺序检查。

示例配置

基本配置

# <file system>        <mount point>   <type>   <options>        <dump>  <pass>
UUID=123e4567-e89b-12d3-a456-426614174000 /           ext4    defaults         1      1
/dev/sda1              /boot           ext4    defaults         1      2
/dev/sdb1              /mnt/data       xfs     defaults,noatime 0      2

启用交换分区

/dev/sda2              none            swap    sw               0      0

网络文件系统挂载(NFS)

server:/shared/path    /mnt/nfs        nfs     rw,vers=4        0      0

临时文件系统挂载(tmpfs)

tmpfs                  /mnt/tmp        tmpfs   defaults         0      0

常用命令

  1. 查看当前挂载点mount -a 自动挂载 /etc/fstab 中未挂载的条目。
  2. 测试配置是否正确sudo mount -av 显示挂载结果和错误信息。
  3. 挂载新条目sudo mount /mnt/data
  4. 显示分区的 UUIDblkid
  5. 重新加载 fstabsudo systemctl daemon-reexec

最佳实践

  1. 使用 UUID: 比直接指定设备文件更稳定,避免设备名称变动(如 sda 变为 sdb)。
  2. 分区对齐检查: 对性能敏感的存储设备(如 SSD),检查分区是否对齐。
  3. 挂载点权限: 确保挂载点目录权限合理,避免引入安全风险。
  4. 备份配置文件: 修改前备份 /etc/fstab,避免误配置导致系统无法启动。
  5. 慎用 auto: 对某些设备(如 U 盘)建议使用 noauto,避免系统启动时卡在挂载失败。

理解和正确配置 /etc/fstab 是保障系统启动和文件系统性能的关键,可以根据需求灵活设置不同分区的挂载策略。

VMware workstation虚拟机虚拟磁盘需要进行修复处理

imajeason阅读(139)

昨天电脑待机,结果早上发现重启了,虚拟机启动报错,如下

指定的虚拟磁盘需要进行修复

打不开磁盘“00009.vmdk”或它所依赖的某个快照磁盘。

模块Disk 启动失败。

未能启动虚拟机。

vmware虚拟机虚拟磁盘需要进行修复处理

查了一下,第一步是删除虚拟机所在目录中的lck文件,“D:\vmware\rocky9”下面,类似这种

完成以上操作有一定几率错误消失,但是概率不大,如果还是报错依旧继续:

找到vmware workstation的安装目录,右键启动一个cmd或者powershell

#到安装目录下,尝试修复
.\vmware-vdiskmanager -R "D:\vmware\rocky9\Rocky Linux 64 位-000009.vmdk"

PS C:\Program Files (x86)\VMware\VMware Workstation> .\vmware-vdiskmanager -R "D:\vmware\rocky9\Rocky Linux 64 位-000009.vmdk"

如果你之前没安装过openssl,这里会报错,提示没有openssl

去下载安装:https://slproweb.com/products/Win32OpenSSL.html

安装过程中记得添加到环境变量。

然后还会报错

PS C:\Program Files (x86)\VMware\VMware Workstation> .\vmware-vdiskmanager -R “D:\vmware\rocky9\Rocky Linux 64 位-000009.vmdk”
SSLConfigLoad: Failed to load OpenSSL config file.

这个报错其实可以忽略,也可以尝试set OPENSSL_CONF,不过这个无所谓

C:\Program Files (x86)\VMware\VMware Workstation> 
set OPENSSL_CONF="C:\OpenSSL-Win64\bin\openssl.cfg"

# 再次修复
.\vmware-vdiskmanager -R "D:\vmware\rocky9\Rocky Linux 64 位-000009.vmdk"
# 如果提示successfully那就成功了
# 如果还是报错,就需要用-e而不是-R,这个参数可以展示具体的错误信息
# 我这里的错误提示是,9这个文件依赖11,那我就去修复11,具体见下图。
# 修复完11,再尝试启动虚拟机就成功了

# 用以下命令查看报错的真正原因,比如依赖
 .\vmware-vdiskmanager -e "D:\vmware\rocky9\Rocky Linux 64 位-000011.vmdk"

PS C:\Program Files (x86)\VMware\VMware Workstation> 
.\vmware-vdiskmanager -R "D:\vmware\rocky9\Rocky Linux 64 位-000009.vmdk"
vmware-vdiskmanager修复vmware

以上应该是比较完整的解决方案,绝大部分人到这里就能修复成功了。

WIN10系统彻底永久关闭自动更新

imajeason阅读(118)

Win10停止支持后,坚持win10的用户最先面临的问题其实不是没有补丁可打,而是防止微软玩阴的。

万一哪天一个“不小心”更新了一个补丁,win10隔三岔五蓝屏卡顿你受得了么。

不管你受得了受不了,我是受不了,所以我决定彻底关闭win10的系统更新。

以下文档是抄的别人的,稍作改动。

一、首先我们需要做的就是禁用Windows Update服务

1、通过键盘Win + R健,弹出运行对话框,输入命令 services.msc ,按“确定”按钮,即可打开服务弹窗。

WIN10系统彻底永久关闭自动更新

 2、往下拉,寻找到找到Windows Update,双击打开。

WIN10系统彻底永久关闭自动更新

 3、双击打开弹框,点击“停止”,将启动类型选为“禁用”,最后点击确定。

WIN10系统彻底永久关闭自动更新

 4、然后切换到“恢复”选项,将第一次失败、第二次失败、后续失败全部修改为“无操作”,点击“应用”“确定”

WIN10系统彻底永久关闭自动更新

 二、通过组策略进行Win10自动更新相关服务关闭

1、按Win + R 组合键,调出运行命令操作弹框,输入“gpedit.msc”,点击确定。

WIN10系统彻底永久关闭自动更新

 2、本地组策略编辑器左侧菜单栏,依次选择:计算机配置 -> 管理模板 -> Windows组件 -> Windows更新

WIN10系统彻底永久关闭自动更新

 3、双击右侧“配置自动更新”,弹出框中设置为“已禁用”,点击“应用”“确定”

WIN10系统彻底永久关闭自动更新

 4、接着再找到“删除使用所有Windows更新功能的访问权限”,双击弹出框,设置已启用,然后“确定”

WIN10系统彻底永久关闭自动更新

 三、禁止任务计划中的Win10自动更新服务

这里可能会遇到权限问题

行到禁用windows update计划任务时,提示:

WIN10系统彻底永久关闭自动更新

这特么windows这个辣鸡系统,限制还真多!!!作为专业的技术人员这搁谁能手的鸟,发誓追查到底,杀无赦!!!

问题解决

  1. 下载windows工具:https://learn.microsoft.com/en-us/sysinternals/downloads/pstools
  2. cmd管理员模式运行,cd到你解压根目录,执行以下命令:
psexec.exe -i -s c:\Windows\system32\mmc.exe /s taskschd.msc

重复之前的禁用操作,这下就有权限了

    WIN10系统彻底永久关闭自动更新

    1、按 Win + R键,调出运行弹框,输入“taskschd.msc”,并“确定”

    WIN10系统彻底永久关闭自动更新

     2、任务计划程序弹框中,依次选择:任务计划程序库 -> Microsoft -> Windows -> WindowsUpdate,将其展示出来的项目均设置为 [ 禁用 ]

    WIN10系统彻底永久关闭自动更新

     四、通过注册表关闭Win10自动更新功能

    1、按Win + R 组合键,在弹出的运行框中输入:regedit,确定。

    WIN10系统彻底永久关闭自动更新

     2、在注册表编辑器中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsoSvc。然后在右侧找到“Start”键。

    WIN10系统彻底永久关闭自动更新

     3、双击start,在弹出框中把基数改成:16进制,数值数据改为“4”,点击确定。

    WIN10系统彻底永久关闭自动更新

     4、右侧找到“FailureActions”,双击弹出框中,把“0010”、“0018”行的左起第5个数值由原来的“01”改为“00”, “确定”。

    WIN10系统彻底永久关闭自动更新

    这样我们就可以彻底把win10自动更新永久关闭。

    搭建rhel系(centos、anolis、kylin)的yum镜像源

    imajeason阅读(452)

    因为工作原因,需要在内网环境搭建yum镜像源。

    搭建镜像源本身没有多大的技术难度,最主要解决的问题如下:

    1、部分系统的源在使用reposync进行从官方源拉取到本地的时候会校验我们本地使用的系统,如果系统不匹配会出现403错误,解决方法就是建一个需要同步源的操作系统的虚拟机,从这台机器里同步下来在scp/rsync到目标的机器上。

    2、同步时间较长,这个基本没有很好的办法,就挂机拉取吧。

    具体操作。

    首先,创建目标操作系统的repo文件,如果是本系统相同的yum源同步就不需要创建;

    然后,reposync –repoid=repo名字 -c repo文件名字,这个repo名字从repo文件里看name,同步下来的内容会放到repo同名的目录中,如果用系统的repo就不用指定-c;

    然后,cd到repo名字的目录中,执行createrepo ./,完成会会生成repodata目录

    现在,这个目录就是镜像源的主目录了。

    安装nginx,配置http服务,内网好提供服务,安装完成后,指定repo的主目录即可;

    生成一个repo文件,url就是nginx对外提供服务的ip端口/repo名字;

    [ks10-adv-os]
    name = Kylin Linux Advanced Server 10 - Os
    baseurl = http://172.10.11.11:8080/kylin/ks10-adv-os/
    gpgcheck = 0
    gpgkey=file:///etc/pki/rep-gpg/RPM-GPG-KEY-kylin
    enabled = 1
    

    在客户端配置上这个repo就可以使用了。具体的操作我就不截图了,仅做记录,也算不得教程。

    Nextcloud在家庭Nas(非80/443)配置ssl证书实现https访问

    imajeason阅读(1250)

    概述

    家庭环境,这里特指中国大陆家庭拨号上网环境,首先是80与443端口都是不通的,要想实现https,配置相对比较麻烦。

    • 1、如果拨号环境没有公网ip或要用443端口,也就是没法通过默认的https端口实现加密访问,就需要使用frp之类的服务将内网的nextcloud映射出去。
    • 2、如果有公网ip,可以端口映射使用非80/443端口,例如9988端口等映射出去。

    关联视频1:https://youtu.be/deA0M1zedlI

    考虑到网盘需要较高的安全性,毕竟是隐私数据,不能接受被入侵,就一定要开启ssl证书访问。

    如果你已经在内网nas搭建好了nextcloud,就直接直接到frp中转部分或者端口映射部分。

    如果没有搭建nextcloud,链接如下:

    nextcloud搭建

    要想实现https服务的前提是把nextcloud服务映射到公网:

    一共有3个方案,分别是frp转发、ipv4独立ip端口映射、ipv6独立ip开放。

    本视频后续操作是frp转发方案,如果做成一个视频,时长有点太长了。

    其他方案后面会陆续出视频。

    首先是第一个方案frp转发

    这个方案的好处是,家庭网络不需要在路由器上做端口映射,这就意味着不需要独立ip,也不需要担心在家庭网络开放服务从而导致运营商以此为借口搞什么幺蛾子,比如警告停止提供服务等,毕竟在中国大陆,私自在家庭网络中提供服务是不被允许的,即使我们搭建这种服务的目的是自用,不会跟你讲道理的。

    优点很明显,缺点当然也是有的,就是需要有一台有独立ip的服务器。同样因为国内vps价格高,带宽小。我的选择是购买cn2-gia网络的搬瓦工服务器,我在简介里放了个推荐链接,大家有需要的可以去挑选一台。

    cn2与cn2-gia的区别还是很大的,gia是专用网络,任意时间段都可以有几十m的速度,基本上可以把家庭网络跑满,达到在路由器上开启端口映射直接提供服务的水平。

    现在我已经准备好了一台机器,我们还需要一个域名,域名的选择比较多,有啥用啥,愿意花钱的可以考虑自行购买com域名,一年一百来块,次之是6位数xyz域名,一年10块左右,最后是不花钱的方案,去  申请一个4级域名,可是可以用的。

    有了域名,把域名解析到服务器ip上,解析的做法是做一条A记录,填写一个子域名名称,例如  pan.888888.xyz,只需要填写pan,ip地址就填写自己的服务器ip。

    现在准备工作已经做好了。

    下一步要搭建frp了。看拓扑图。

    FRP拓扑

    下面我们先做服务器端,在frp服务器上操作。

    1、安装nginx代理工具。

    nginx的作用是代理,也就是把frp转发后的端口再做一次代理,代理到80/443端口,并且挂上证书。

    sudo yum update
    sudo yum install nginx

    修改nginx配置

    cd /etc/nginx/conf.d/

    vi pan.conf

    server {
        listen 80;
        server_name zhangdaqi.duckdns.org;
        rewrite ^(.*) https://$server_name:443$1 permanent;
    }
    
    server {
        listen 443 ssl;
        server_name zhangdaqi.duckdns.org;
        charset utf-8;
    
        ssl_certificate /etc/letsencrypt/live/zhangdaqi.duckdns.org/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/zhangdaqi.duckdns.org/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 5m;
        keepalive_timeout 70;
    
        index index.html index.php;
        root /html/zhangdaqi.duckdns.org;
        #charset koi8-r;
        #access_log logs/host.access.log main;
        location / { 
            #proxy_redirect on ;
            proxy_pass http://127.0.0.1:7001;
            proxy_ssl_session_reuse off;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $http_host;
    
            # Show real IP in v2ray access.log
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

    2、域名解析

    在域名网站做一条解析
    A记录   pan      ip地址

    3、申请证书

    我喜欢用certbot工具申请,这是Let’s Encrypt 的证书申请工具,申请到的证书有效期三个月,到期前可以进行证书更新。

    安装certbot

    yum install python-urllib3
    yum install python-requests
    yum install certbot

    申请证书。

    certbot certonly --standalone -d pan.abc.com

    定时任务,自动更新证书。

    修改nginx证书相关配置,完整配置类似下面,注意修改为自己的域名,以及frp端口。

    现在重启nginx,就可以刷新web,实现了https。

    4、搭建frp服务。

    使用的操作系统是debian11

    然后在我们的内网的一台机器上做frp服务,与服务器端进行数据交换。

    5、openwrt配置frp

    如果你有openwrt,主路由旁路由都没关系,安装frp内网穿透工具,也是可以的,配置如下。

    配置nextcloud conf允许我们的域名和服务器访问。

    重启服务后,理论上已经可以通过域名https访问你的nextcloud服务了,但是会报证书错误。

    此为第一个方案,其他方法不久就会更新。

    frp安装

    imajeason阅读(439)

    frp是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。

    官方网站:https://gofrp.org/zh-cn/

    具体实现:

    1、需要一个公网ip地址,用来安装部署frp服务端frps

    2、需要在内网环境中部署一台frp客户端frpc,当做代理服务器

    3、用户访问公网ip地址,会先连接到frp客户端,再根据相应的规则去匹配转发,把请求发送到内网中其他主机上

    4、在服务端需要开启相应的端口(7000,7001,7002,7003等)

    安装部署:

    1、下载frps

    frp压缩包同时包含了 frps(frp 服务端)和frpc(frp 客户端)

    下载地址:https://github.com/fatedier/frp/releases

    2、服务端部署

    #创建目录

    mkdir -p /data/soft
    mkdir -p /data/server

    上传安装包frp_0.52.3_linux_amd64.tar.gz到/data/soft目录下面

    #解压
    cd /data/soft
    wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
    tar zxvf frp_0.52.3_linux_amd64.tar.gz
    mv /data/soft/frp_0.52.3_linux_amd64 /data/server/frp
    #修改服务端配置文件
    cp /data/server/frp/frps.toml /data/server/frp/frps.toml.bak

    vi /data/server/frp/frps.toml

    [common]
    bind_addr = 0.0.0.0
    bind_port = 7000
    vhost_http_port = 7001
    vhost_https_port = 7002
    tcp_mux = true
    authentication_method = token
    token = 123456

    :wq! #保持退出

    #后台启动

    nohup /data/server/frp/frps -c /data/server/frp/frps.toml > /dev/null 2>&1 &

    #添加服务端开机启动

    vi /usr/lib/systemd/system/frps.service

    [Unit]
    Description=frps
    StartLimitIntervalSec=0
    [Service]
    Type=simple
    Restart=always
    RestartSec=1
    User=root
    WorkingDirectory=/data/server/frp
    ExecStart=/usr/bin/env ./frps -c ./frps.toml
    [Install]
    WantedBy=multi-user.target

    :wq! #保持退出

    #重新加载 systemd 配置
    systemctl daemon-reload
    #启动frp
    systemctl start frps
    #停止frp
    systemctl stop frps
    #重启frp
    systemctl restart frps
    #查看frp状态
    systemctl status frps
    #服务在系统开机启动时自动启动
    systemctl enable frps

    3、客户端部署

    #创建目录
    mkdir -p /data/soft
    mkdir -p /data/server

    上传安装包frp_0.52.3_linux_amd64.tar.gz到/data/soft目录下面

    #解压
    cd /data/soft
    tar zxvf frp_0.52.3_linux_amd64.tar.gz
    mv /data/soft/frp_0.52.3_linux_amd64 /data/server/frp
    #修改客户端配置文件
    cp /data/server/frp/frpc.toml /data/server/frp/frpc.toml.bak

    vi /data/server/frp/frpc.toml #编辑配置文件

    [common]
    server_addr = 1.2.3.4 #服务端的ip地址
    server_port = 7000 #服务端的端口
    tcp_mux = true #优化传输,和服务端必须一致
    authentication_method = token #身份验证方式,和服务端必须一致 
    token = 123456 #token设置密码,用于通过身份验证创建连接,和服务端必须一致
    [tcp]
    type = tcp #代理类型,包含 tcp, udp, http, https 等 
    local_ip = 192.168.128.198 #要转发到的真实ip地址 
    local_port = 3389 #要转发到的真实ip地址的端口 
    remote_port = 7003  #远程服务器的代理端口
    [http]
    type = http #代理类型,包含 tcp, udp, http, https 等 
    local_ip = 192.168.199.239 #要转发到的真实ip地址 
    local_port = 7001 #要转发到的真实ip地址的端口 
    custom_domains = zhangdaqi.duckdns.org #服务器域名或外网ip

    :wq! #保持退出

    #后台启动客户端
    nohup /data/server/frp/frpc -c /data/server/frp/frpc.toml > /dev/null 2>&1 &

    #添加客户端开机启动服务

    vi /usr/lib/systemd/system/frpc.service

    [Unit]
    Description=frpc
    StartLimitIntervalSec=0
    [Service]
    Type=simple
    Restart=always
    RestartSec=1
    User=root
    WorkingDirectory=/data/server/frp
    ExecStart=/usr/bin/env ./frpc -c ./frpc.toml
    [Install]
    WantedBy=multi-user.target

    :wq! #保持退出

    #重新加载 systemd 配置
    systemctl daemon-reload
    #启动frp
    systemctl start frpc
    #停止frp
    systemctl stop frpc
    #重启frp
    systemctl restart frpc
    #查看frp状态
    systemctl status frpc
    #服务在系统开机启动时自动启动
    systemctl enable frpc

    4、验证

    现在可以通过外网ip+端口来访问内网的服务器了。

    内网端口暴露在公网上,请务必设置强密码,不要使用弱口令,很容易被攻击!

    至此,Linux下使用frp搭建内网穿透服务器完成。

    原文链接:https://www.osyunwei.com/archives/14110.html

    Docker搭建Nextcloud容器实现自建网盘服务

    imajeason阅读(682)

    之前做了好多视频,都有讲到nextcloud搭建,但是没有一篇单独的文章写文档,此篇补全这个遗憾。

    之前关注我的朋友可能知道,我所有的应用都是在nextcloud中部署的,nextcloud当然也不例外。

    以unraid为例,先获取镜像:

    docker pull linuxserver/nextcloud:27.1.4

    然后启动容器。

    注意:

    /mnt/user/appdata/是unraid中的一个典型容器路径,而/mnt/user/appdata/nextcloud是nextcloud的专用路径。

    这个路径要改成你自己的,不要直接复制。

    puid与guid是你的第一个普通用户的id和组id,可以通过id 用户名查看。

    注意以下操作是在nas的命令行里操作的。

    docker run -d \
    --name nextcloud \
    -p 8444:443 \
    -p 8180:80 \
    -v /mnt/user/appdata/nextcloud/data:/data \
    -v /mnt/user/appdata/nextcloud:/config \
    -e PUID=1000 \
    -e GUID=100 \
    -e TZ=Asia/Shanghai \
    --restart unless-stopped \
    linuxserver/nextcloud:27.1.4
    

    等待容器启动,即可通过8180或者8443这个端口在内网访问网盘服务了。

    下载youtube|bilibili视频的免费工具,从视频到合集一网打尽

    imajeason阅读(905)

    本文章内容包括

    vividl下载工具下载安装使用说明
    youtubedl-material容器的安装使用
    yt-dlp命令行下载工具说明

    之前我在nas上搭建一个流媒体下载的工具

    http://192.168.188.100:17442/#/home

    可以用来下载在线视频网站的视频,其实这个下载工具背后使用的工具叫yt-dlp,非常好用

    youtubedl-material

    但是我近来下载合集比较多,如果用这个下载了之后视频我还要从nas上进行整理再传到我的网盘中,通过webdav服务进行观看,就比较麻烦

    所以我就用了一段时间的yt-dlp

    就是在win10中安装yt-dlp这个命令行工具,然后通过命令来下载

    再结合ffmpeg等工具就可以在下载完的同时把媒体文件转换成自己需要的格式

    但是我发现时间长了,还是不尽兴,命令行太麻烦了。

    幸好,我找到了这样一款功能简洁的基于yt-lp的下载工具,这个软件本质上就是调用yt-dlp命令来实现下载,跟命令行上能做的一样多。

    就是这个工具vividl是一个开源免费工具

    https://github.com/Bluegrams/Vividl

    这个工具仅有windows版本

    https://sourceforge.net/projects/vividl/files/

    大名鼎鼎的sourceforge,下载的时候需要开梯子

    下载下来安装上即可,因为是基于.net开发的,所以安装会依赖.net,如果没有的话去下载安装一下net再安装

    使用的时候要注意

    如果要下载youtube这种需要梯子的网站的视频也是需要设置梯子的

    下载目的文件夹也需要设置一下

    下载播放列表

    需要添加下载任务的时候选择download playlist

    这样就可以愉快的进行下载了

    下面是web版本的安装。通过docker-compose就可以启动

    注意,http_proxy与http_proxy是梯子的地址,设置你自己的,既然你有nas,搭建一个openwrt旁路由应该不是什么难事

    version: "2"
    services:
        ytdl_material:
            environment: 
                ytdl_mongodb_connection_string: 'mongodb://ytdl-mongo-db:27017'
                ytdl_use_local_db: 'false'
                write_ytdl_config: 'true'
                http_proxy: ""
                https_proxy: ""
            restart: always
            container_name: youtubedl-material
            volumes:
                - ./youtubedl-material/appdata:/app/appdata
                - ./youtubedl-material/subscriptions:/app/subscriptions
                - ./youtubedl-material/users:/app/users
                - ./download/audio:/app/audio
                - ./download/video:/app/video
    
            ports:
                - "17442:17442"
            image: tzahi12345/youtubedl-material:4.3.2
    
            
        ytdl-mongo-db:
            # If you are using a Raspberry Pi, use mongo:4.4.18
            image: mongo:4
            logging:
                driver: "none"          
            container_name: mongodb-ytdl
            restart: always
            volumes:
                - ./youtubedl-material/db/:/data/db
    

    再然后

    如果上面两个工具都不能满足你的需求,那就直接用命令行吧

    既然你选择使用命令行了,我相信安装python和配置环境变量都难不倒你

    再去下载转码工具ffmpeg,也把它配置到环境变量的path中

    此时保证打开cmd或者powershell中执行ffmpeg有出书工具说明

    输入python会进入python交互工具,就安装成功了

    这时候在命令行中执行

    pip install yt-dlp -i https://pypi.tuna.tsinghua.edu.cn/simple

    等待安装完毕在命令行中就有了yt-dlp命令

    yt-dlp命令详细使用方法请移步:https://www.dongvps.com/2023-12-14/yt-dlp/

    yt-dlp

    开源图片应用immich升级,智能图片分类功能可以在老机器上运行了

    imajeason阅读(661)

    之前的时候immich在我的e3 1265l的机器上无法运行,缺少avx支持,现在新版已经不需要这个了,可以运行成功自动分类了。

    immich
    最好的备份图片应用immich

    安装也有变化,多了个typesense

    官方安装文档:https://immich.app/docs/install/docker-compose

    内容如下:

    Step 1 – Download the required files

    创建一个immich的根目录,用于存放immich相关的文件,已经运行容器的目录

    mkdir ./immich-appcd ./immich-app
    cd  ./immich-app

    下载docker-compose.yml and example.env,

    wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml

    我做了修改,主要是修改postgres的数据目录与typesense的数据目录,方便备份,官方的是通过docker自行创建的,不便于备份恢复。

    version: "3"
    
    #
    # WARNING: Make sure to use the docker-compose.yml of the current release:
    #
    # https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
    #
    # The compose file on main may not be compatible with the latest release.
    #
    
    
    services:
      immich-server:
        container_name: immich_server
        image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
        command: [ "start.sh", "immich" ]
        volumes:
          - ${UPLOAD_LOCATION}:/usr/src/app/upload
          - /etc/localtime:/etc/localtime:ro
        env_file:
          - .env
        ports:
          - 2283:3001
        depends_on:
          - redis
          - database
          - typesense
        restart: always
    
      immich-microservices:
        container_name: immich_microservices
        image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
        # extends:
        #   file: hwaccel.yml
        #   service: hwaccel
        command: [ "start.sh", "microservices" ]
        volumes:
          - ${UPLOAD_LOCATION}:/usr/src/app/upload
          - /etc/localtime:/etc/localtime:ro
        env_file:
          - .env
        depends_on:
          - redis
          - database
          - typesense
        restart: always
    
      immich-machine-learning:
        container_name: immich_machine_learning
        image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
        volumes:
          - model-cache:/cache
        env_file:
          - .env
        restart: always
    
      typesense:
        container_name: immich_typesense
        image: typesense/typesense:0.24.1@sha256:9bcff2b829f12074426ca044b56160ca9d777a0c488303469143dd9f8259d4dd
        environment:
          - TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
          - TYPESENSE_DATA_DIR=/data
          # remove this to get debug messages
          - GLOG_minloglevel=1
        volumes:
          - /srv/dev-disk-by-label-data/databases/immich_typesense/tsdata:/data
        restart: always
    
      redis:
        container_name: immich_redis
        image: redis:6.2-alpine@sha256:80cc8518800438c684a53ed829c621c94afd1087aaeb59b0d4343ed3e7bcf6c5
        restart: always
    
      database:
        container_name: immich_postgres
        image: postgres:14-alpine@sha256:50d9be76e9a90da4c781554955e0ffc79d9d5c4226838e64b36aacc97cbc35ad
        env_file:
          - .env
        environment:
          POSTGRES_PASSWORD: ${DB_PASSWORD}
          POSTGRES_USER: ${DB_USERNAME}
          POSTGRES_DB: ${DB_DATABASE_NAME}
        volumes:
          - /srv/dev-disk-by-label-data/databases/immich_postgres/pgdata:/var/lib/postgresql/data
        restart: always
    
    volumes:
      model-cache:

    下载env文件,这个文件是immich的配置文件,创建容器的时候会读取这里面的配置:

    wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

    修改env文件的TYPESENSE_API_KEY,设置一个api key,长一点的,恢复容器的时候这个key要保持一致。

    修改UPLOAD_LOCATION,这个就是指定immich上传的图片的存放路径,如果不修改的话,就会在最开始创建的./immich-app中,因为我们要在这个目录启动容器。

    其他的不需要修改

    (可选) Get hwaccel.yml 文件是转码配置,用不到的吧。

    wget https://github.com/immich-app/immich/releases/latest/download/hwaccel.yml

    启动容器即可,启动后访问nas的2283端口即可。

    docker-compose up -d     # or `docker compose up -d` based on your docker-compose version

    升级容器。

    docker-compose pull && docker-compose up -d     # Or `docker compose up -d`

    NAS全平台同步神器Rsync

    imajeason阅读(1404)

    nas玩久了,数据就多起来了,还有些数据非常重要

    之前跟大家分享过,数据备份的三二一原则,三份相同的数据,我们需要让nas自行的进行完整的备份,至少每天一次。

    对于普通文档类数据,备份只是把数据备份出来,不需要考虑文件的属性

    但是对于一些应用类数据,比如docker用到的文件,如果备份的文件权限变了,等你需要复制回去进行应用恢复的时候就会发现各种权限带来的问题

    所以备份是需要专用工具的,而不是直接的复制粘贴

    rsync正是数据同步的神器,而且在大部分的nas系统上,rsync几乎是标配,我们只需要学会使用它

    Rsync是一款开源的、快速的、多功能的、可实现全量及增量(全量备份是指全部备份,增量备份是在上一次备份的基础上只备份更新的内容)的本地货远程数据同步备份的优秀工具。Rsync可以在大部分的操作系统上安装运行,包括windows。

    rsync可以根据同步文件的大小和修改时间等信息来判断文件是否需要同步,从而实现增量备份,而且能够同步文件的属性信息来确保文件的元信息一致。

    rsync有三种模式

    1、本地模式比较简单,跟我们的复制粘贴一样,但是不同处在于它可以复制文件的属性、属主等权限类信息,非常牛批

    2、shell模式,就是通过ssh命令实现文件的同步,这里的ssh命令特指linux系的操作系统,也就是说通过ssh命令获取对端的shell权限来进行同步

    这个模式是linux系统中比较常用的同步模式,因为这种同步不需要对端做任何的修改,只需要开放ssh即可

    3、daemon模式,是守护进程的方式传输数据,需要搭建服务

    daemon模式是nas上比较常用的模式,但是ssh模式也是可以的

    全局域网只需要有一台rsync服务,就可以让所有的rsync客户端实现数据的定时同步,非常方便

    OMV中rsync使用

    首先是omv,就是点点点就行

    创建用户,创建目录,赋予权限

    开启服务,设置账户和目录

    rsync -av gits/ [email protected]::backup

    群晖中rsync使用

    首先需要开启ssh

    群晖比较简单,打开后台,找到文件服务的rsync,开启22,注意,这里开启的是ssh模式

    这样就开启了rsync服务

    如果将群晖作为客户端使用需要去套件中间,安装backup

    在shell中测试,gits是需要备份的目录,后面是目标路径,这里是群晖

    rsync -av gits/ [email protected]::backup

    不过还是建议使用daemon模式,群晖开启daemon模式也需要去命令行里操作

    # 创建用户
    rsync_backup
    注意还要让用户对需要同步的目录有读写权限
    /volume1/storages/omv_backup/ 

    配置文件

    
    uid             = rsync_backup
    gid             = 0
    use chroot      = no
    max connections = 4
    pid file        = /var/run/rsyncd.pid
    timeout         = 600
    auth users = rsync_backup
    secrets file = /etc/rsync.password
    [backups_synology]
        path = /volume1/storages/omv_backup/
        comment = Backups_omv
        read only = FALSE

    创建密码文件/etc/rsync.password,权限600

    rsync_backup:123456

    然后去控制面板关闭rsync,再开启,实现重启。

    unraid中rsync使用

    unraid内置了rsync,但是没有提供操作界面,我们可以通过命令行来启动rsync服务

    具体的操作也要去命令行里操作

    考虑到unraid系统的特殊性,建议将unraid作为服务器使用

    创建目录

    mkdir -p /boot/custom/etc/
    mkdir -p /boot/custom/etc/rc.d

     将rsyncd.conf文件同时放到/boot/custom/etc/etc下,两份一样内容。

    rsyncd.conf文件,内容:

    uid             = rsync_backup
    gid             = rsync_backup
    use chroot      = no
    max connections = 4
    pid file        = /var/run/rsyncd.pid
    timeout         = 600
    auth users = rsync_backup
    secrets file = /etc/rsync.password
    
    [backups_synology]
        path = /mnt/user/backup/synology
        comment = Backups_synology
        read only = FALSE
    [backups_omv]
        path = /mnt/user/backup/omv/
        comment = Backups_omv
        read only = FALSE
    

    创建密码文件

    useradd rsync_backup -s /sbin/nologin -M
    mkdir /mnt/user/backup/omv -p
    
    chown rsync_backup.rsync_backup /mnt/user/backup
    
    echo "rsync_backup:123456">/etc/rsync.password
    
    chmod 600 /etc/rsync.password # 注意权限

    将配置持久化(unraid操作)

    touch /boot/custom/etc/rc.d/S20-init.rsyncd

    内容如下:
    S20-init.rsyncd

    #!/bin/bash
    if ! grep ^rsync /etc/inetd.conf > /dev/null ; then
    cat <<-EOF >> /etc/inetd.conf
    rsync   stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/bin/rsync --daemon
    EOF
    read PID < /var/run/inetd.pid
    kill -1 ${PID}
    fi
    cp /boot/custom/etc/rsyncd.conf /etc/rsyncd.conf

    这是初始化文件,因为unraid在重启后会丢失配置,需要将配置初始化到flash中。

    编辑初始化文件

    vi /boot/config/go

    将下面的内容放在末尾,后续每次执行初始化,都会初始化rsync服务端的配置

    /boot/custom/etc/rc.d/S20-init.rsyncd

    如果此时rsync没有运行

    ps aux|grep rsync
    # 如果没运行
    rsync --daemon

    大家可以根据自己的nas系统与操作系统组合,选择合适的rsync搭配方案

    选择能够方便的进行定时任务的设备作为客户端,客户端可以作为数据源推送数据到服务器,也可以从rsync服务器拉取数据进行同步

    也就是说,rsync客户端的选择与源数据在哪台设备上并没有关系

    windows中rsync使用

    我们首先安装windows版,方便没有linux客户端的朋友进行测试

    windows系统安装rsync服务

    cwRsync4.2.0下载地址:https://www.jb51.net/softs/39404.html?spm=a2c6h.12873639.article-detail.5.1aa02876MqUwGv

    https://www.itefix.net/cwrsync

    链接:https://pan.baidu.com/s/1CnY_6DQPLWahb9OqY9Xr4g 
    提取码:5r2a 

    下载rsync

    下载解压后,得到server和client,根据需要安装

    windows版rsync server,安装完成后,进入安装的目录,安装路径下默认配置rsyncd.conf

    # C:\Program Files (x86)\ICW
    
    use chroot = false
    strict modes = false
    hosts allow = *   #允许任意IP
    lock file = rsyncd.lock 
    max connections = 5
    port = 28950   #指定端口号
    charset=UTF-8  #指定字符集
    #pid = 0
    uid = 0    #运行rsync守护进程的用户 0为不限制
    gid = 0    #运行rsync守护进程的组   0为不限制
    log file = rsyncd.log  #日志文件存放位置
     
    # Module definitions
    # Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
    #
    #[test]
    #path = /cygdrive/c/work
    #read only = false
    #transfer logging = yes
     
    [data]
    path = /cygdrive/f/backup
    auth users = zhangdaqi       #指定授权用户名
    secrets file = etc/rsyncd.secrets  #指定密码存储文件
    read only = no         
    transfer logging = yes
    hosts allow = *

    特殊之处在于路径,这里要注意。确保指定的path存在,我这里设置的是F:\backup

    /cygdrive/c/work 相当于c:/work 

    通过 菜单–cwRsyncServer–02. Prep a Dir for Upload 设置目录权限,需要设置成600,也就是指定的用户可以读写,其他用户和用户组都没有权限。

    密码文件rsyncd.secrets的格式是 用户名:密码

    rsyncuser:rsyncpass

    需将其权限设置为600,即其他组没有读权限。同时要保证用户cwRsyncServer既是该文件拥有者又对其具有读写权限。

    此处需要确保账户zhangdaqi存在,如果没有就创建一个

    修改完毕后,win+R 跳出输入框,输入services.msc就可以打开服务,去win 的服务中启动cwrsync。

    windows客户端

    这里最好是把rsync 客户端(注意,不是服务端)的路径加到环境变量中,不然操作的时候需要带着rsync的绝对路径,不是很方便

    在windows cmd中执行命令

    rsync -vzrtopg --progress --delete [email protected]::test /cygdrive/d/rsyncBackup --password-file=/cygdrive/c/etc/rsyncd.secrets

    (–password-file也可以写前边)

    rsyncd.secrets密码文件,名字随便起,格式,只写密码

    rsyncpass

    设置密码访问权限chown.exe可从服务端拷贝过来

    同样的,目录权限需要设置成600,也就是指定的用户可以读写,其他用户和用户组都没有权限。

    chmod -c 600 /cygdrive/c/etc/rsyncd.secrets
    chown administrator /cygdrive/c/etc/rsyncd.secrets

    可访问局域网中所有的rsync服务,包括windows、unraid等标准rsync服务。

    rsync -vzrtopg --progress --delete /cygdrive/d/rsyncBackup/ 192.168.1.82::test
    
    rsync -vzrtopg --progress --delete /cygdrive/d/rsyncBackup/ [email protected]::test --password-file=/cygdrive/c/etc/rsyncd.secrets

    掌握了rsync,定时同步重要数据,可保数据无忧

    我是张大七,下期再见。