# Debian 安装

需要注意的几个点是:

  1. 安装语言的时候选择英文安装,否者会造成部分乱码,至于后面想要使用中文,安装完成后再配置就好了。
  2. 配置软件包不需要选择网络镜像,后期再配置镜像源。
  3. 勾选 ssh 服务,以方便远程操作;至于是否选择图形界面,随个人喜好。

# 基本配置

# 添加 sudo 管理组

your_name is not in the sudoers file. This incident will be reported.

出现这种情况一般是你用普通用户键入 sudo 命令,但这个用户又没有加入 sudo 组上面,导致权限不够。

解决:

添加设置默认网关
su -
Password: 
visudo

然后移动光标,添加 your_name ALL=(ALL:ALL) ALL# User privilege specification 下面,根据提示 写入 ^O回车 Enter 确认保存, 退出 ^X ,得到:

添加设置默认网关
cat /etc/sudoers
\#
\# This file MUST be edited with the 'visudo' command as root.
\#
\# Please consider adding local content in /etc/sudoers.d/ instead of
\# directly modifying this file.
\#
\# See the man page for details on how to write a sudoers file.
\#
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
\# Host alias specification
\# User alias specification
\# Cmnd alias specification
\# User privilege specification
root	ALL=(ALL:ALL) ALL
your_name	ALL=(ALL:ALL) ALL
\# Allow members of group sudo to execute any command
%sudo	 ALL=(ALL:ALL) ALL
\# See sudoers(5) for more information on "@include" directives:
@includedir /etc/sudoers.d

note:

su 带有 - ,这和 su 是不同的,在用命令 su 的时候只是切换到 root,但没有把 root 的环境变量传过去,还是当前用户的环境变量,用 su - 命令会将环境变量也一起带过去,就像和 root 登录一样。关于 su - 的分析可参看:dpkg-reconfigure 命令找不到问题解决

# 避免提示光盘安装软件包

Media change: please insert the disc labeled 'Debian GNU/Linux xxx DVD' Media change: please insert the disc labeled.

在 Debian 系统中,如果您碰巧使用 DVD 安装,当你调用 apt 时,会抛出一个错误消息,表示存储库 cdrom 没有发布文件,并要求插入 Debian 光盘来离线安装软件包,这时候我们需要绕过去掉提示,以便使用网络安装。

sudo nano /etc/apt/sources.list

得到:

# deb cdrom:[Debian GNU/Linux 11.8.0 _Bullseye_ - Official amd64 DVD Binary-1 20231007-14:05]/ bullseye contrib main
deb cdrom:[Debian GNU/Linux 11.8.0 _Bullseye_ - Official amd64 DVD Binary-1 20231007-14:05]/ bullseye contrib main
# Line commented out by installer because it failed to verify:
#deb http://security.debian.org/debian-security bullseye-security main contrib
# Line commented out by installer because it failed to verify:
#deb-src http://security.debian.org/debian-security bullseye-security main contrib

可以看到,默认是先通过 deb cdrom:... 安装软件的。所以在前面加一个 # 把这行注释掉即可;最后 写入 ^O回车 Enter 确认保存, 退出 ^X

# 更换软件包镜像源

E: Package 'xxx' has no installation candidate.

这种情况一般是软件包获取不到,可能是网络问题,也可能是因为源的问题,换个好一点的镜像源就行了。

例如:更换为 清华源地址

sudo cp /etc/apt/sources.list /etc/apt/sources.list.back
sudo nano /etc/apt/sources.list
sudo apt update

note:

先找到镜像源文件并备份,然后使用 nano 编辑,把获取到的镜像源地址全部覆盖替换原有的文本,最后再执行 apt update 更新软件包,至此就可以安装原本装失败的软件了。如果用不习惯 nano 编辑器,可以安装 vim

# 内核编译工具

make[n]: *** /lib/modules/kernel_version-amd64/build: No such file or directory.

在编译部署内核模块的时候,如果报这个错误,是因为没有 linux-headers 导致。

sudo apt update
sudo apt install linux-headers-$(uname -r)-amd64

note:

命令 uname -r 就是用来获取当前内核版本的。

一般编译驱动会用到 sudo apt-get install build-essential linux-headers-$(uname -r)-amd64

# 网卡驱动添加

获取网卡型号:

lspci | grep -i net
02:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8723BE PCIe Wireless Network Adapter
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)

其中 Ethernet controller 后面的表示以太网有线网卡,这里是 RTL8111/8168/8411; Network controller 后面表示无线网卡,这里则是 RTL8723BE。

  • 有线网卡

    一般主板上的有线网卡都是自带驱动的,但不排除驱动不管用或者另类没有,这个时候就需要自己找驱动,当然,如果有现成编译好打好包的驱动,那么只需要用 U 盘 copy 到系统然后进行安装即可,如果没有,那么就需要自己编译驱动了,这是一个很麻烦的事,特别是你完全没网的时候,光是安装一堆依赖都得一个个找。。。

    当然你也可以找个联网的虚拟机,安装一样的系统,编译好再 copy 过去;或者利用 apt-cache depends package_name 获取安装依赖,然后一个个安装;对于 .deb 文件,可以用 dpkg --info path_deb_file 查看。

  • 无线网卡

    在 Debian 最小安装中,是不存在无线网卡驱动的,只能自己安装:

    • intel 的无线网卡驱动:

      apt install firmware-iwlwifi

      支持型号:https://packages.debian.org/bullseye/firmware-iwlwifi

    • realtek(小螃蟹)的无线网卡驱动:

      apt install firmware-realtek

      支持型号:https://packages.debian.org/bullseye/firmware-realtek

    • 高通的无线网卡驱动:

      apt install firmware-atheros

      支持型号:https://packages.debian.org/bullseye/firmware-atheros

    • other:

      当然,如果你像一劳永逸,可以直接安装 firmware-nonfree 整个大包,或者在里面找相应的型号子包安装:https://packages.debian.org/source/bullseye/firmware-nonfree;而对于其它比较新的设备或者不在清单上的设备,可以去官网或者开源广场上找,但大部分需要自己编译驱动。

关于网卡驱动安装完后,可以 reboot 重启,然后执行 dmesg -l err 查看日志,看驱动是否生效,如果没有,将会出现 error,然后排查解决就好了。

# 引导时间修改

如果你是单系统,可以更改引导时间缩短跳转启动系统的时间。

nano /etc/default/grub

更改 GRUB_TIMEOUT 数值为 1,这里建议不要改成 0,留出 1s 的时间,防止以后有用到。

cat /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

最后更新 Grub:

update-grub

note:

可以通过 systemd-analyze time 查看开机时间,通过 systemd-analyze blame 查看开机服务占用时间。

# ssh 配置

在安装的时候有勾选 ssh 服务的话,那么只需要配置一下文件即可,否则就需要自己去下载。(当然,这里只是前置使用,后期安装 OMV 后,将由 OMV 接管)

# 安装中文输入法

在 linux 系统中,常见的两大输入法框架:ibus 和 fcitx,而这里使用 Fcitx5,是用来接替 Fcitx 的。

注意: fcitx5 包仅提供基本框架,且仅支持英文。如果要输入其他语言(例如中文或日文),则需要安装输入法引擎(IME)。

Fcitx5 输入法引擎有以下几种:

中文

  • fcitx5-chewing 包:是流行的繁体中文注音输入引擎,它基于 libchewing 包。

  • fcitx5-chinese-addons 包:包含与中文相关的 addon,例如拼音、双拼和五笔。

  • fcitx5-rime 包:使用 Rime 引擎。

日文

  • fcitx5-anthy 包:是流行的日文输入引擎。但是,它已不再受到积极开发。

  • fcitx5-kkc 包:是日文假名输入引擎,它基于 libkkc 包。

  • fcitx5-mozc 包:基于 Mozc(Google 日文输入法的开源版本)。

  • fcitx5-skk 包:是日文假名输入引擎,它基于 libskk 包。

其他语言

  • fcitx5-hangul 包:用于输入韩文,基于 libhangul 包。
  • fcitx5-unikey 包:可用于输入越南语字符。
  • fcitx5-m17n 包:可用于各种语言。

1、卸载旧版及其余输入法

apt purge fcitx* ibus*

2、安装 Fcitx5 简体中文输入

apt install fcitx5 fcitx5-chinese-addons

3、重启配置

reboot

开机后查看 fcitx5 是否随桌面环境自动启动,如无,则添加开机自启:

if [ ! -d "~/.config/autostart/" ]; then
 mkdir  ~/.config/autostart/
fi
 cp /usr/share/applications/org.fcitx.Fcitx5.desktop ~/.config/autostart/

4、添加拼音输入

在应用中打开 Fcitx5 配置,然后在输入法中添加中文拼音,同时在全局选项中配置输入法切换快捷键(默认是 Ctrl + 空格键 切换)。

5、修改全局变量

  • 使用 im-config 组件配置
apt install im-config
im-config

进入图形界面选择 Fcitx5 输入法。

  • 编辑 /etc/environment
vim /etc/environment

添加如下全局配置:

GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
INPUT_METHOD=fcitx
GLFW_IM_MODULE=ibus

资料:

https://wiki.archlinuxcn.org/wiki/Fcitx5

https://wiki.debian.org/zh_CN/I18n/Fcitx5

# 节电处理

# 无线

软件关闭蓝牙功能:

rfkill block bluetooth

软件关闭 wifi 功能:

rfkill block wifi

# USB

添加 USB 空闲自动挂起处理,空闲等待时间为 2S, reboot 重启生效:

echo 'ACTION=="add", SUBSYSTEM=="usb",  ATTR{power/control}="auto", ATTR{power/autosuspend_delay_ms}="2000"' > /etc/udev/rules.d/50-usb_power_save.rules
reboot

其它控制:

ATTR{power/control}="on" or ATTR{power/autosuspend_delay_ms}="-1" ,表示禁用挂起; ATTR{power/wakeup}="enable" ,表示使能 usb 唤醒,写入 disable 则关闭。

如果想要单独设置,可以如下查看 usb 设备对应的 udev 字段,eg:查看 Logitech 鼠标:

lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0bda:b728 Realtek Semiconductor Corp. RTL8723B Bluetooth
Bus 001 Device 002: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
lsusb -tvv
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/7p, 5000M
    ID 1d6b:0003 Linux Foundation 3.0 root hub
    /sys/bus/usb/devices/usb2  /dev/bus/usb/002/001
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/9p, 480M
    ID 1d6b:0002 Linux Foundation 2.0 root hub
    /sys/bus/usb/devices/usb1  /dev/bus/usb/001/001
    |__ Port 4: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M
        ID 046d:c52b Logitech, Inc. Unifying Receiver
        /sys/bus/usb/devices/1-4  /dev/bus/usb/001/002
    |__ Port 4: Dev 2, If 2, Class=Human Interface Device, Driver=usbhid, 12M
        ID 046d:c52b Logitech, Inc. Unifying Receiver
        /sys/bus/usb/devices/1-4  /dev/bus/usb/001/002
    |__ Port 4: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
        ID 046d:c52b Logitech, Inc. Unifying Receiver
        /sys/bus/usb/devices/1-4  /dev/bus/usb/001/002
    |__ Port 8: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M
        ID 0bda:b728 Realtek Semiconductor Corp. RTL8723B Bluetooth
        /sys/bus/usb/devices/1-8  /dev/bus/usb/001/003
    |__ Port 8: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M
        ID 0bda:b728 Realtek Semiconductor Corp. RTL8723B Bluetooth
        /sys/bus/usb/devices/1-8  /dev/bus/usb/001/003
udevadm info -a /dev/bus/usb/001/002
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
  looking at device '/devices/pci0000:00/0000:00:15.0/usb1/1-4':
    KERNEL=="1-4"
    SUBSYSTEM=="usb"
    DRIVER=="usb"
    ATTR{authorized}=="1"
    ATTR{avoid_reset_quirk}=="0"
    ATTR{bConfigurationValue}=="1"
    ATTR{bDeviceClass}=="00"
    ATTR{bDeviceProtocol}=="00"
    ATTR{bDeviceSubClass}=="00"
    ATTR{bMaxPacketSize0}=="8"
    ATTR{bMaxPower}=="98mA"
    ATTR{bNumConfigurations}=="1"
    ATTR{bNumInterfaces}==" 3"
    ATTR{bcdDevice}=="1211"
    ATTR{bmAttributes}=="a0"
    ATTR{busnum}=="1"
    ATTR{configuration}=="RQR12.11_B0032"
    ATTR{devnum}=="2"
    ATTR{devpath}=="4"
    ATTR{idProduct}=="c52b"
    ATTR{idVendor}=="046d"
    ATTR{ltm_capable}=="no"
    ATTR{manufacturer}=="Logitech"
    ATTR{maxchild}=="0"
    ATTR{power/active_duration}=="5486884"
    ATTR{power/async}=="enabled"
    ATTR{power/autosuspend}=="2"
    ATTR{power/autosuspend_delay_ms}=="2000"
    ATTR{power/connected_duration}=="5486884"
    ATTR{power/control}=="on"
    ATTR{power/level}=="on"
    ATTR{power/persist}=="1"
    ATTR{power/runtime_active_kids}=="0"
    ATTR{power/runtime_active_time}=="5486602"
    ATTR{power/runtime_enabled}=="forbidden"
    ATTR{power/runtime_status}=="active"
    ATTR{power/runtime_suspended_time}=="0"
    ATTR{power/runtime_usage}=="1"
    ATTR{power/wakeup}=="enabled"
    ATTR{power/wakeup_abort_count}=="0"
    ATTR{power/wakeup_active}=="0"
    ATTR{power/wakeup_active_count}=="0"
    ATTR{power/wakeup_count}=="0"
    ATTR{power/wakeup_expire_count}=="0"
    ATTR{power/wakeup_last_time_ms}=="0"
    ATTR{power/wakeup_max_time_ms}=="0"
    ATTR{power/wakeup_total_time_ms}=="0"
    ATTR{product}=="USB Receiver"
    ATTR{quirks}=="0x0"
    ATTR{removable}=="removable"
    ATTR{rx_lanes}=="1"
    ATTR{speed}=="12"
    ATTR{tx_lanes}=="1"
    ATTR{urbnum}=="34"
    ATTR{version}==" 2.00"
...

参看:

https://docs.kernel.org/driver-api/usb/power-management.html

https://wiki.archlinux.org/title/Udev#Waking_from_suspend_with_USB_device

http://www.reactivated.net/writing_udev_rules.html#example-printer

# cpu 调度

一般支持以下几种策略,旧内核可能不支持 schedutil

GovernorDescription
performanceRun the CPU at the maximum frequency, obtained from /sys/devices/system/cpu/cpuX/cpufreq/scaling_max_freq .
powersaveRun the CPU at the minimum frequency, obtained from /sys/devices/system/cpu/cpuX/cpufreq/scaling_min_freq .
userspaceRun the CPU at user specified frequencies, configurable via /sys/devices/system/cpu/cpuX/cpufreq/scaling_setspeed .
ondemandScales the frequency dynamically according to current load. Jumps to the highest frequency and then possibly back off as the idle time increases.
conservativeScales the frequency dynamically according to current load. Scales the frequency more gradually than ondemand.
schedutilScheduler-driven CPU frequency selection.

关于 schedutil 的原理可看:https://deepinout.com/android-system-analysis/android-cpu-related/principle-analysis-of-cpu-governor-schedutil.html

查看 cpu 支持的调度策略及当前使用的模式:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
conservative ondemand performance schedutil
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
schedutil

修改所有 cpu 的策略:

echo governor | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
governor

note: governor 为支持的策略之一,选你需要更改的就好了。

注意,该操作只在当前生效,任何复位或重启后,都将恢复默认操作,因此如果要让每次生效,那么需要编写开机脚本或写入内核。

查看各 cpu 频率:

cat /proc/cpuinfo | grep -E '^model name|^cpu MHz'
model name      : Intel(R) Pentium(R) Silver J5040 CPU @ 2.00GHz
cpu MHz         : 1029.564
model name      : Intel(R) Pentium(R) Silver J5040 CPU @ 2.00GHz
cpu MHz         : 1168.290
model name      : Intel(R) Pentium(R) Silver J5040 CPU @ 2.00GHz
cpu MHz         : 818.342
model name      : Intel(R) Pentium(R) Silver J5040 CPU @ 2.00GHz
cpu MHz         : 960.974

资料:

https://wiki.archlinux.org/title/CPU_frequency_scaling#Scaling_governors

https://blog.kelu.org/tech/2021/05/13/bios-config-remark.html

# 睡眠与休眠

关于 Suspend,Linux 内核提供了四种电源模式,如下表:

模式描述
freeze冻结 I/O 设备,将它们置于低功耗状态,使处理器进入空闲状态,唤醒最快,耗电比其它 standby, mem, disk 方式高。
standby除了冻结 I/O 设备外,还会暂停系统,唤醒较快,耗电比其它 mem, disk 方式高。
mem将运行状态数据存到内存,并关闭外设,进入等待模式,唤醒较慢,耗电比 disk 方式高。(实际由 /sys/power/mem_sleep 抉择)
disk将运行状态数据存到硬盘,然后关机,唤醒最慢;对于嵌入式系统,由于没有硬盘,所以一般不支持。(实际由 /sys/power/disk 抉择)

然,虽然 linux 内核支持,但实际上不同的平台,对应的支持也是不一样的;可以使用以下命令查看对 Suspend 支持:

cat /sys/power/state
freeze mem disk

在这里,就只支持 3 种: freezememdisk

在 linux 中,有两个比较特殊的 Suspend 管理,那就是 memdisk ,分别是 Suspend to RAM(挂起到内存,通称睡眠)Suspend to disk(挂起到硬盘,通称休眠) 这两种电源管理模式,它们默认使用的 ACPI 定义如下:

  • Suspend to RAM(挂起到内存,通称睡眠)

    ACPI 定义的 S3 睡眠状态。通过将机器中大多数和 RAM 不相关的部件断电来工作,RAM 是恢复机器状态所必需的。由于可以节省大量电力,建议笔记本电脑在使用电池运行且盖子关闭时(或用户在一段时间内处于非活动状态)自动进入此模式。

  • Suspend to disk(挂起到硬盘,通称休眠)

    ACPI 定义的 S4 睡眠状态。将机器状态保存到交换空间并关闭机器。再次开机后,恢复状态。直到开机前,机器都不会有任何待机功耗。

note:实际上, memdisk 是由它们对应的配置文件决定的,但一般默认会使用上面的 ACPI 状态。

对于 memdisk 的控制:

mem 模式的操作由 /sys/power/mem_sleep 抉择,常见以下几种睡眠处理:

  • deep:Suspend-To-RAM,对应 ACPI 为 S3;
  • shallow:Power-On Suspend,对应 ACPI 为 S1;
  • s2idle:Suspend-To-Idle,对应 ACPI 为 S0;

disk 模式的操作则由 /sys/power/disk 抉择,常见以下几种休眠处理:

  • platform:使用平台(BIOS 支持)提供的方法将把系统置于超低功耗状态(如 ACPI S4),使得额外的唤醒选项可用,并且让平台固件在唤醒之后可能允许做一个简简的初始化;
  • shutdown:顾名思义就是关闭系统设备断电;
  • reboot:这个。。。不用说了吧;
  • suspend:系统混合挂起,是的没错,可以将睡眠和休眠混合,可以通过在 /etc/systemd/sleep.conf 文件进行配置以达到效果,可参考:挂起或休眠请求时的混合睡眠
  • test_resume:诊断操作。先是加载镜像(就好像系统刚从休眠中醒来,当前运行的内核实例是还原内核),然后再恢复整个系统。

查看支持:

cat /sys/power/mem_sleep
s2idle [deep]
cat /sys/power/disk
[platform] shutdown reboot suspend test_resume

如果想要切换相应的控制,只需往写入你要的处理模式就好了;当然,这只是在下一次中生效,当执行完一次后将会恢复;若要设成永久处理,那么可以通过修改内核属性来达到效果。

自动休眠:

一般作为服务器,是不需要自动休眠的,但对于一周也用不了多少次的,可能使用自动休眠会省电一点,配合唤醒功能即可达到快速恢复工作环境的效果。

vim /etc/default/grub

然后添加 GRUB_CMDLINE_LINUX="mem_sleep_default=deep" ,然后重新生成 grub.cfg 文件,重启生效:

grub-mkconfig -o /boot/grub/grub.cfg
reboot

资料:

https://wiki.archlinux.org/title/Power_management/Suspend_and_hibernate

https://man.archlinux.org/man/sleep.conf.d.5

https://wiki.archlinux.org/title/Power_management#Suspend_and_hibernate

https://www.unixtutorial.org/disable-sleep-on-ubuntu-server/

https://www.kernel.org/doc/html/latest/admin-guide/pm/sleep-states.html

更多电源管理:https://wiki.archlinux.org/title/Power_management#Power_saving

Kernel 参数:https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt

# 图形环境切换

前提:系统已经安装了桌面环境,需要禁止桌面环境,以纯命令行启动,以节约性能。

获取当前系统运行的界面模式:

systemctl get-default

纯命令行启动:

systemctl set-default multi-user.target
reboot

note:如果想从命令行中启动桌面,可以通过相应的图形界面启动命令来启动,例如启动 xfce4 的桌面: startxfce4 .

桌面环境启动:

systemctl set-default graphical.target
reboot

对于多桌面,可以使用下面命令,然后选择对应的桌面系统,输入序号确认:

update-alternatives --config x-session-manager

如果要删除 x-session-manager 的某个选项,可以先通过以下方式列出其路径,然后通过删除选项(eg:gnome-session):

update-alternatives --list x-session-manager
update-alternatives --remove x-session-manager /usr/bin/gnome-session

参考:

https://unix.stackexchange.com/questions/367294/how-do-i-change-my-default-session

# 远程唤醒

首先,查看系统主板 BIOS 是否支持 Wake-On-LAN ,要是支持的话,必须先启动它,因为它被默认设禁用。

然后,需要一个支持 Wake-On-LAN 的网卡;无线网卡并不支持。你需要运行 ethtool 命令查看网卡是否支持 Wake-On-LAN :

apt install ethtool
ethtool eno1 | grep Wake-on
        Supports Wake-on: pumbg
        Wake-on: d

这条命令输出的 Supports Wake-on 字段会告诉你你的网卡支持哪些功能,同时 Wake-on 指示着当前配置的模式,一般有以下几种选项:

  • d -- 禁用(disable)
  • p -- 物理活动唤醒(Wake on PHY activity)
  • u -- 单播消息唤醒(Wake on unicast activity)
  • m -- 多播(组播)消息唤醒(Wake on multicast activity)
  • b -- 广播消息唤醒(Wake on broadcast activity)
  • a -- ARP 唤醒(Wake on ARP activity)
  • g -- 特定数据包唤醒(magic packet activity)

修改 wol 功能:

ethtool -s eno1 wol g
ethtool eno1 | grep Wake-on
        Supports Wake-on: pumbg
        Wake-on: g

此刻已经开启 magic packet 唤醒了,然后执行 ip a 查看网卡的 mac 地址和 ip 并记录,再写入 echo mem > /sys/power/state ,让系统进入休眠,再在另一台主机测试网络唤醒。

  • Windows

    可以选择该工具使用:Wake On Lan Command Line

  • Linux

    可以安装对应的 pack 包(eg:etherwake),这里就不多说了。

当你能成功唤醒后,就证明你的主板支持,bios 上的 wol 有启用,系统配置上也打开了。

最后,对于部分系统,可能有些在设置完显示 Wake-on: g 后,重启会变回默认配置,这时可以编写一个开机启动服务:

vim /etc/systemd/system/wol@.service

添加如下内容:

[Unit]
Description=Wake-on-LAN for %i
Requires=network.target
After=network.target
[Service]
ExecStart=/usr/bin/ethtool -s %i wol g
Type=oneshot
[Install]
WantedBy=multi-user.target

然后 [Install] 区块中的 WantedBy 字段,是表示该服务所在的 Target。如 WantedBy=multi-user.target 指的是该服务所属于 multi-user.target ;当执行 systemctl enable xxx.service 命令时, xxx.service 的符号链接就会被创建在 /etc/systemd/system/multi-user.target 目录下。可以通过 systemctl get-default 命令查看系统默认启动的 target,一般为 multi-user 或者是 graphical 。因此配置好相应的 WantedBy 字段,可以实现服务的开机启动。

multi-user.target 表示多用户命令行状态; graphical.target 表示图形用户状态,它依赖于 multi-user.target 。官方文档有一张非常清晰的 [Target 依赖关系图](https://www.freedesktop.org/software/systemd/man/bootup.html#System Manager Bootup)。

嘛,如果你是用图形界面的,也是可以用 multi-user.target 的,因为 graphical.target 依赖 multi-user.target ,可以利用命令 systemctl list-units --type=target 查看到 multi-user.target 是处于 Active 状态的。

最后,重新加载所有的 systemd 服务,打开自启动并启动服务,其中 @ 后面跟随的是你的 wol 网卡名称:

sudo systemctl daemon-reload
sudo systemctl enable wol@eno1
sudo systemctl start wol@eno1

note:

对于 systemd 服务的控制,可以使用如下命令:

systemctl [command] [unit]

[command]:

  • start:立刻启动后面接的 unit。

  • stop:立刻关闭后面接的 unit。

  • restart:立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思。

  • reload:不关闭 unit 的情况下,重新载入配置文件,让设置生效。

  • enable:设置下次开机时,后面接的 unit 会被启动。

  • disable:设置下次开机时,后面接的 unit 不会被启动。

  • status:目前后面接的这个 unit 的状态,会列出有没有正在执行、开机时是否启动等信息。

  • is-active:目前有没有正在运行中。

  • is-enable:开机时有没有默认要启用这个 unit。

  • kill :不要被 kill 这个名字吓着了,它其实是向运行 unit 的进程发送信号。

  • show:列出 unit 的配置。

  • mask:注销 unit,注销后你就无法启动这个 unit 了。

  • unmask:取消对 unit 的注销。

一些其它命令:

systemctl poweroff # 系统关机
systemctl reboot # 重新开机
systemctl suspend # 进入暂停模式
systemctl hibernate # 进入休眠模式
systemctl rescue # 强制进入救援模式
systemctl emergency # 强制进入紧急救援模式

资料:

https://wiki.archlinux.org/title/Wake-on-LAN

https://wiki.debian.org/WakeOnLan

# 异常记录查看

使用 last -x shutdown reboot 命令可以查看系统的关机和重启记录,包括异常关机。该命令会显示每次关机或重启的时间、持续时间。

使用 dmesg | grep "shutdown" 命令可以查看内核的消息缓冲区,筛选出关机的相关信息。

参考:

https://unix.stackexchange.com/questions/9819/how-to-find-out-from-the-logs-what-caused-system-shutdown

https://blog.csdn.net/qq_28345657/article/details/126833131

# 系统备份

linux 系统说白了就是一个强大的文件系统,既然是文件,哪能不能像日常备份文件那样直接压缩备份呢?答案是可以,只是在备份压缩的时候注意把各个文件的权限都保留下来。

在备份之前先了解一下 linux 的系统目录结构:

文件夹英文全称文件夹作用
/bootBoot存放的启动 Linux 时使用的内核文件,包括连接文件以及镜像文件。
/binBinaries存放着最常用的程序和指令,所有用户都可以执行。是 /usr/bin 目录的软连接。
/sbinSuper User Binaries保存和系统环境设置相关的命令,只有超级用户可以使用这些命令,有些命令可以允许普通用户查看。是 /usr/sbin 目录的软连接。
/usrUnix Software Resources用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
/usr/binUnix Software Resources Binaries系统用户使用的应用程序与指令。
/usr/sbinUnix Software Resources Superuser Binaries超级用户使用的比较高级的管理程序和系统守护程序。
/usr/localUnix Software Resources Local安装第三方软件的安装目录,一般是通过编译源码的方式安装的程序。
/usr/srcUnix Software Resources Source内核源代码默认的放置目录。
/devDevices存放的是 Linux 的外部设备。注意:在 Linux 中访问设备和访问文件的方式是相同的。
/etcEditable Text Configuration Chest存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。
/optOptional Application Software Packages可选应用软件包,第三方安装的软件保存位置,存放软件安装包。
/libLibrary存放基本代码库(比如 c++ 库),其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
/procProcesses虚拟文件系统,数据保存在内存中,存放当前进程信息
/rootRoot系统管理员的用户主目录。
/tmpTemporary存放临时文件
/varVariable存放经常修改的数据,比如程序运行的日志文件( /var/log 目录下)。
/homeHome用户缺省宿主目录。
/lost+foundLost And Found一般情况下为空的,存放一些系统出错的检查结果
/srvServer服务数据目录
/sysSystem这是 linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs。sysfs 文件系统集成了下面 3 种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中。
/mntMount挂载目录。临时文件系统的安装点,默认挂载光驱和软驱的目录
/mediaMedia挂载目录。 挂载媒体设备,如软盘和光盘
/miscMiscellaneous Device挂载目录。 挂载 NFS 服务
/runRun里面的东西是系统运行时需要的,不能随便删除。当系统重启时,这个目录下的文件应该被删掉或清除;下次系统运行时重新生成。

备份系统:

su -s
cd /
tar -zcvpf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys --exclude=/media --exclude=/srv/dev-disk-by-uuid* /

恢复系统:

如果原来的 Debian 系统已经崩溃,无法进入。则可以在目标机上用 ISO、LiveCD 等启动,挂载磁盘(一般会自动挂载到 /media 文件夹)

su -s
tar -zcvpf backup.tgz -C /media/<对应的磁盘>
mkdir -p proc lost+found mnt sys media

# 安装 openmediavault 6.x

在操作如下流程前,要进行备份!备份!备份!

具体安装以 https://docs.openmediavault.org/en/latest/installation/on_debian.html 为准。

1、临时配置环境变量

export LANG=C.UTF-8
export DEBIAN_FRONTEND=noninteractive
export APT_LISTCHANGES_FRONTEND=none

2、添加软件包存储库

进入文件编辑:

vim /etc/apt/sources.list.d/openmediavault.list

然后粘贴以下存储库链接(这里使用的是 北外镜像,以加快国内访问速度,当然你也可以使用源链接),保存退出:

deb https://mirrors.bfsu.edu.cn/OpenMediaVault/public shaitan main
deb https://mirrors.bfsu.edu.cn/OpenMediaVault/packages shaitan main
## Uncomment the following line to add software from the proposed repository.
# deb https://mirrors.bfsu.edu.cn/OpenMediaVault/public shaitan-proposed main
# deb https://mirrors.bfsu.edu.cn/OpenMediaVault/packages shaitan-proposed main
## This software is not part of OpenMediaVault, but is offered by third-party
## developers as a service to OpenMediaVault users.
# deb https://mirrors.bfsu.edu.cn/OpenMediaVault/public shaitan partner
# deb https://mirrors.bfsu.edu.cn/OpenMediaVault/packages shaitan partner

3、添加 openmediavault 密钥

apt-get install --yes gnupg
wget --quiet --output-document=- https://packages.openmediavault.org/public/archive.key | gpg --dearmor --yes --output "/usr/share/keyrings/openmediavault-archive-keyring.gpg"

4、更新软件包源并安装 omv

apt-get update
apt-get --yes --auto-remove --show-upgraded \
    --allow-downgrades --allow-change-held-packages \
    --no-install-recommends \
    --option DPkg::Options::="--force-confdef" \
    --option DPkg::Options::="--force-confold" \
    install openmediavault

5、同步系统配置

omv-confdbadm populate

note:

对于网络服务,现在只解析 /etc/network/interfaces 以获取当前的网络配置。 如果以不同的方式配置网络(例如通过 systemdNetworkManager ),则不会填充数据库,并且不包含使用 netplan for systemd-networkd 和 systemd-resolved 部署网络配置所需的信息。 在这种情况下,请使用 omv-firstaid 命令执行初始网络配置。

如果想通过 openmediavault 使用的服务重新部署网络配置,则执行:

vim /etc/network/interfaces

然后把里面的网卡配置用 # 注释掉,接着:

rm /etc/systemd/network/*
netplan apply
omv-salt deploy run systemd-networkd

# omv6 基本配置

# 用户账户设置

安装完 omv 后,如果有使用 同步系统配置 操作,那么,在 用户 -> 用户 管理中可以看到前面安装系统时创建的用户,之后,你可以在这里创建或修改各类用户;为了安全你也可以删除掉 root 用户,以避免 root 登录,需要注意权限问题,避免登录 omv web 无法操作。

note:如果存在多个用户,在众多用户里,至少要有一个用户添加到 openmediavault-adminssh group 中,这将决定在登录 omv web 后是否拥有配置操作,否则任意用户登录 omv web 上都不存完整的配置操作。具体可看 omv 登陆后界面只剩仪表盘

# 配置 SSH

进入 服务 -> SSH ,选择勾选 已启用 选项,接着按个人需求修改配置,同时为能 SSH 登录操作的用户添加到 ssh group ;如果你想为了安全,而选择关闭 允许 root 登陆密码验证 选项,那么需要注意的是,至少要为一个用户添加 ssh group ,否则将没有用户可以登录 SSH,同时为用户配置好 SSH 密钥对。

note:SSH 密钥对生成,需要先在本机系统中(即需要控制的机器上,一般就是我们的 windows 系统上),输入 ssh-keygen 命令,然后输入存储的路径及命名 ~/.ssh/omv-id_rsa ,如果需要为调用私钥而添加密码认证,则输入密码,否者直接留空回车,不设密码,最后再次确认回车,至此就生成了 SSH 密钥对了;紧接着在 omv web 的 用户 -> 用户 中选择你需要进行 SSH 密钥登录的账户,然后编辑,在 SSH 公钥 中添加刚才生成的密钥对中的公钥(即 omv-id_rsa.pub ),至此就完成了。

# 创建 Raid 软阵列

在这里,不选择在 omv 页面上创建,而是使用命令创建。以 Raid 1 为例:

  1. 准备两个硬盘,最好使用同型号的不同批次跟产期的,如果选择不同型号的,那么要考虑转速、缓存、容量这些尽可能一致。

  2. lsblk 获取需要建立 Raid 的磁盘名称 sdx (sdx 可以为 sda、sdb 等)。

  3. 使用 fdisk /dev/sdx 分别为两块磁盘创建单一分区。

    • m :查看命令操作。
    • d :删除已有分区。
    • n :创建新的分区。
    • p :查看创建分区。
    • w :应用分区信息。
    按 n 创建新的分区。
    然后按 p 选择主分区。
    接下来选择分区号为 1。
    按两次回车键默认将整个容量分配给它。
    然后,按 p 来打印创建好的分区。
    按 l,列出所有可用的类型。
    按 t 修改分区类型。
    键入 29 设置为 Linux 的 RAID 类型,然后按 Enter 确认。
    然后再次使用 p 查看我们所做的更改。
    使用 w 保存更改。
  4. 利用 mdadm 命令建立 Raid 软阵列。

    • 检查 sdx 分区并确认 Raid 分区的类型 mdadm -E /dev/sdx

    • 假设用 dev/sdb1dev/sdc1 两个磁盘创建一个名为 /dev/md0 的 Raid 1 设备 mdadm --create /dev/md0 --level=1 --raid-device=2 /dev/sd[b-c]1

    • 查看 Raid 同步状态 cat /proc/mdstat 。初次建立构建,需要很长一段时间。可以通过以下命令调整 Raid 同步速度:

      sysctl -w dev.raid.speed_limit_max=2000000
      sysctl -w dev.raid.speed_limit_min=100000
    • 使用 mdadm -E /dev/sdx1 分别查看 Raid 设备类型。

    • dev/md0 创建 ext4 文件系统 mkfs.ext4 /dev/md0 ,最好等初始化构建完成后操作。

    • 检查 Raid 信息 mdadm -D /dev/md0

常见的 RAID 磁盘阵列:

阵列描述特点
JBOD(线性)JBOD 不是标准的 RAID 级别,它只是在近几年才被一些厂家提出,并被广泛采用。虽然 JBOD 让多个磁盘看来似乎只有一个,但它是通过把多个驱动器合并成一个大的逻辑磁盘来做到这一点的。- 任意一块硬盘损坏,整个 JBOD 都无法使用。<br/>- 未损坏的硬盘上的数据不会丢失,但恢复数据存在门槛。
RAID 0RAID 0 是组建磁盘阵列中最简单的一种形式,只需要 2 块以上的硬盘即可。 RAID 0 是 RAID 磁盘阵列中性能最好的硬盘组合方式,但没有提供冗余或错误修复能力。按照一定规则,将文件拆分存储在 RAID 0 中,一旦一块硬盘损坏,整个 RAID 0 的所有数据全部丢失。
RAID 1(镜像)RAID 1 称为磁盘镜像,由至少 2 块硬盘组成。原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件。只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行。它是 RAID 磁盘阵列中性能最差,数据安全性最佳的。会损失一半硬盘容量。
RAID 5RAID 5 被称为 “分布式奇偶校验的独立磁盘结构” ,需最低 3 块硬盘组成。<br/> 每在 RAID 5 中存入一个文件,3 块硬盘中:1 块用于存储该文件;2 块用于生成奇偶校验信息。只要 RAID 5 中只有 1 块硬盘损坏,就可以替换该硬盘并恢复数据;会损失 1 块硬盘容量。
RAID 6RAID 6 是对 RAID 5 的扩展,需最低 4 块硬盘组成。<br/> 每在 RAID 6 中存入一个文件,4 块硬盘中:2 块用于存储该文件;2 块用于生成奇偶校验信息。只要 RAID 6 中有任意 2 块硬盘损坏,就可以替换这 2 块硬盘并恢复数据;会损失 2 块硬盘容量。
RAID 10RAID 10 需要至少 4 块硬盘组成,每 2 块硬盘组成一个 RAID 1 ,2 个 RAID 1 组成一个 RAID 0 。性能与安全性在 RAID 0 和 RAID 1 中取得了一个平衡。性能比 RAID 0 差,比 RAID 1 高;安全性同于 RAID 1 。

扩展:

https://www.cnblogs.com/felix-zp/p/9738724.html

https://www.flysfeq.site/index.php/archives/65/

https://www.cnblogs.com/37yan/p/7489597.html

https://www.cnblogs.com/lpfuture/p/6385657.html

https://cloud-atlas.readthedocs.io/zh-cn/latest/linux/storage/software_raid/raid-check.html

# 替换更新镜像源

配置基本链接的镜像源(原因是在你安装完 omv 后,前面配置的软件包存储库链接将会修改为官方默认的链接,此时需要重新设置镜像):

omv-env set OMV_APT_REPOSITORY_URL "https://mirrors.bfsu.edu.cn/OpenMediaVault/public"
omv-env set OMV_APT_ALT_REPOSITORY_URL "https://mirrors.bfsu.edu.cn/OpenMediaVault/packages"
omv-env set OMV_APT_KERNEL_BACKPORTS_REPOSITORY_URL "https://mirrors.bfsu.edu.cn/debian"
omv-env set OMV_APT_SECURITY_REPOSITORY_URL "https://mirrors.bfsu.edu.cn/debian-security"
omv-salt stage run all

然后执行:

apt update
reboot

重启后回到 omv 网页,你会看到有提示显示可以更新软件。

note:

对于使用 omv-env set 更换源,其实是在不同的 openmediavault 文件写入,这些文件可以在 /etc/apt/sources.list.d/ 中找到。

# 安装 omv-extras

由于国内原因,防 github 解析错误,执行以下操作,如果这时候已经出现网络问题,则使用手动方法,查看 GitHub520

sed -i "/# GitHub520 Host Start/Q" /etc/hosts && curl https://raw.hellogithub.com/hosts >> /etc/hosts

根据官方提供,安装 omv-extras:

wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash

然后刷新 omv 网页,即可在 系统 中找到 omv-extras。

如果网络不好可以手动安装:

  1. 进入 https://github.com/OpenMediaVault-Plugin-Developers/packages 下载对应的插件包,然后把插件包放到 omv 上,路径自己决定,然后进入该路径执行:
dpkg -i openmediavault-omvextrasorg_xxx.deb

更新 omv-extras 镜像源:

omv-env set OMV_EXTRAS_APT_REPOSITORY_URL "https://mirrors.bfsu.edu.cn/OpenMediaVault/openmediavault-plugin-developers"
omv-env set OMV_DOCKER_APT_REPOSITORY_URL "https://mirrors.bfsu.edu.cn/docker-ce/linux/debian"
omv-env set OMV_PROXMOX_APT_REPOSITORY_URL "https://mirrors.bfsu.edu.cn/proxmox/debian"
omv-salt stage run all

# 安装 docker

进入 系统 -> 插件 ,搜索 compose ,点击选择下载,然后等待下载完成;

进入 系统 -> omv-extras ,勾选 Docker repo ,点保存;

最后在 服务 -> Compose 中可以找到 设置 ,查看 Docker 状态是否为 Installed and running ,如果不是,可以尝试重启 Docker 或者重新安装 Docker;再不行就回到第二点先取消勾选接着保存,然后再把 Docker repo 勾选上保存并重复后面操作。

参考:https://wiki.omv-extras.org/doku.php?id=omv6:docker_in_omv#dokuwiki__top

如果 Docker 无法运行,输入 systemctl status docker 查看状态,然后再执行 systemctl restart docker 看是否成功,如果显示如下错误:

Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.

可以使用命令 journalctl -xedockerd --debug 来分析无法运行的错误。

参考:https://stackoverflow.com/questions/55906503/docker-how-to-fix-job-for-docker-service-failed-because-the-control-process-ex

# docker 换源

编辑 /etc/docker/daemon.json 配置文件:

vim /etc/docker/daemon.json

更改为以下信息:

{
  "data-root":"/var/lib/docker", //docker 存储路径
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn" // 更改换源
  ]
}

note:如果是在 /etc/docker/daemon.json 文件上指定 Docker 存储路径,那么,在 服务 -> Compose -> 设置 -> Docker 中的 Docker 存储 上留空配置(该下方有备注说明)。

最后,使用如下命令重启生效:

systemctl daemon-reload
systemctl restart docker

完成后使用 docker info 命令,查看 Registry Mirrors: 是否为配置的镜像源。

# 安装 portainer 管理面板

如果你喜欢敲命令来操作 Docker,那么这点你可以跳过了,否则可以安装 portainer 对 Docker 进行页面管理。

运行 Docker:

# 拉取汉化版镜像
docker pull 6053537/portainer-ce:latest
# 启动容器
docker run -d \
  --name portainer \
  -p 9000:9000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /app/portainer_data:/data \
  --privileged=true \
  --restart always \
  6053537/portainer-ce

参数解释:

  • -d :以后台模式运行容器。
  • --name portainer :设置容器的名称为 portainer
  • -p 9000:9000 :将容器的 9000 端口映射到主机的 9000 端口,使得 portainer 的 Web 界面可以通过主机的端口访问。
  • -v /var/run/docker.sock:/var/run/docker.sock-v /app/portainer_data:/data :将主机 /var/run/ 目录下的 docker.sock/app/portainer_data 目录下的 portainer_data 分别映射进容器的 /var/run/docker.sock/data 路径。
  • --restart always :确保容器在退出时自动重启。
  • 6053537/portainer-ce :指定使用的 Docker 镜像。

note:在 docker run 执行后面加入 --restart=always 可以使开机后会自动启动面板,否者还要自己连到设备启动。

最后通过访问 http://localhost:9000 来访问 portainer 的 Web 界面。

# 安装 ddns-go 进行动态域名解析

建立存放路径:

mkdir -p /app/ddns-go

运行 Docker:

docker pull jeessy/ddns-go:latest
docker run -d \
  --name ddns-go \
  --net=host \
  -v /app/ddns-go:/root \
  --restart always \
  jeessy/ddns-go \
  -l :9877 -f 600

参数解释:

  • --net=host :使用 docker host 模式

  • -l :通过传参命令,指定监听地址

  • -f :通过传参命令,同步间隔时间 (秒)

# 使用 ipv6

通过网卡获取:

需要使用 docker host 模式,如果不能从网卡获取 240 开头的外网 ipv6 地址,那么将会显示 “没有找到可用的网卡” 不可选。

通过命令获取:

ip -6 addr show eth0 | grep -v deprecated | grep 'inet6 [^f:]' | awk -F' ' '{print $2}' | awk -F'/' '{print $1}' | tail -1

然后是步骤拆解:

  1. ip -6 addr show eth0 ,显示网卡(eth0)的全部 ipv6 地址
  2. grep -v deprecated ,去除已经失效(deprecated)的地址
  3. grep 'inet6 [^f:]' ,显示有 ipv6 地址的那一行(不包含 f 开头的内网 ipv6 地址)
  4. awk -F' ' '{print $2}' ,根据空格符号分列,打印第二列
  5. awk -F'/' '{print $1}' ,根据斜杠符号 / 分列,打印第一列
  6. tail -1 ,显示最后一行

参看:DDNS-GO 通过命令获取有效的 IPv6 地址

# 安装 webdav 服务

建立存放路径:

# $WEBDAV_PATH 为你 webdav 部署共享的路径
mkdir -p /app/webdav /<$WEBDAV_PATH>

添加配置:

address: 0.0.0.0
port: 8081
# TLS-related settings if you want to enable TLS directly.
tls: false
cert: cert.pem
key: key.pem
# Prefix to apply to the WebDAV path-ing. Default is '/'.
prefix: /
# Enable or disable debug logging. Default is 'false'.
debug: false
# Disable sniffing the files to detect their content type. Default is 'false'.
noSniff: false
# The directory that will be able to be accessed by the users when connecting.
# This directory will be used by users unless they have their own 'directory' defined.
# Default is '.' (current directory).
directory: .
# The default permissions for users. This is a case insensitive option. Possible
# permissions: C (Create), R (Read), U (Update), D (Delete). You can combine multiple
# permissions. For example, to allow to read and create, set "RC". Default is "R".
permissions: R
# The default permissions rules for users. Default is none.
rules: []
# Logging configuration
log:
  # Logging format ('console', 'json'). Default is 'console'.
  format: console
  # Enable or disable colors. Default is 'true'. Only applied if format is 'console'.
  colors: true
  # Logging outputs. You can have more than one output. Default is only 'stderr'.
  outputs:
  - stderr
# CORS configuration
cors:
  # Whether or not CORS configuration should be applied. Default is 'false'.
  enabled: false
  credentials: false
  allowed_headers:
    - Depth
  allowed_hosts:
    - http://localhost:8081
  allowed_methods:
    - GET
  exposed_headers:
    - Content-Length
    - Content-Range
# The list of users. If the list is empty, then there will be no authentication.
# Otherwise, basic authentication will automatically be configured.
#
# If you're delegating the authentication to a different service, you can proxy
# the username using basic authentication, and then disable webdav's password
# check using the option:
#
# noPassword: true
users:
  # Example 'john' user with bcrypt encrypted password, with custom directory.
  - username: john
    password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"
    directory: /data

运行 Docker:

docker pull ghcr.io/hacdias/webdav:latest
docker run -d \
  --name webdav \
  -v /<$WEBDAV_PATH>/:/data \
  -v /app/webdav/config.yml:/webdav_config.yml:ro \
  -p 6065:8081 \
  --restart always \
  ghcr.io/hacdias/webdav \
  -c /webdav_config.yml

参数解释:

  • -v /app/webdav/config.yml:/webdav_config.yml:ro :将主机的 config.yml 配置文件映射为容器的 /webdav_config.yml 文件,用于启动参数的获取。
  • -p 6065:8081 :将容器的 8081 端口映射到主机的 6065 端口,使得 portainer 的 Web 界面可以通过主机的端口访问。
  • -c /webdav_config.yml :通过传参命令,指定读取(容器内路径)启动参数配置。

# 安装 komga 漫画管理

为你的 komga 存放创建数据和配置目录:

# $PATH 为你存储盘的路径
mkdir -p /<$PATH>/komga/config /<$PATH>/komga/data

运行 Docker:

docker pull gotson/komga:latest
docker run -d \
  --name komga \
  -v /<$PATH>/komga/data:/data \
  -v /<$PATH>/komga/config:/config \
  -p 25600:25600 \
  -e TZ=Asia/Shanghai \
  --restart always \
  --user "0:0" \
  gotson/komga

参数解释:

  • -v /<$PATH>/komga/data:/data-v /<$PATH>/komga/config:/config :将对应存储盘目录下的 /komga/data/komga/config 目录分别映射进容器的 /data/config 路径,用于数据和配置的持久化。
  • -e TZ=Asia/Shanghai :设置容器的环境变量 TZ ,用于指定时区。
  • --user "0:0" :以 root 用户运行容器,这对于某些环境的权限管理是必要的。

note:用 docker 容器安装的话,在 添加库 时选择的根文件夹填写的是容器内部的路径(即上面的 /data 目录下)。

拓展:https://www.himiku.com/archives/komga.html

# 安装 gitea 代码管理

为你的 gitea 存放创建数据和配置目录:

# $PATH 为你存储盘的路径
mkdir -p /<$PATH>/gitea/data

运行 Docker:

docker pull gitea/gitea:latest
docker run -d \
  --name gitea \
  -v /<$PATH>/gitea/data:/data \
  -v /etc/timezone:/etc/timezone:ro \
  -v /etc/localtime:/etc/localtime:ro \
  -p 3000:3000 \
  -p 2220:22 \
  --restart always \
  gitea/gitea

官方安装:https://docs.gitea.com/zh-cn/installation/install-with-docker

# 安装 calibre-web 图书管理

为你的 calibre-web 存放创建数据和配置目录:

# $PATH 为你存储盘的路径
mkdir -p /<$PATH>/calibre/config /<$PATH>/calibre/book

运行 Docker:

docker pull ghcr.io/gshang2017/calibre-web:latest
docker run -d \
  --name=calibre-web \
  -e PUID=0 \
  -e PGID=0 \
  -e TZ=Asia/Shanghai \
  -e DOCKER_MODS=linuxserver/calibre-web:calibre \
  -p 8083:8083 \
  -v /<$PATH>/calibre/config:/config \
  -v /<$PATH>/calibre/library:/books \
  --restart always \
  ghcr.io/gshang2017/calibre-web

# other

# omv 登陆后界面只剩仪表盘

一般会出现这种情况是因为更换了用户,但管理权限没有给过去,或者以非管理员登录等,总之就是登录用户没有足够的权限,如果你还禁止了 root 登录,那么你可以使用如下命令把权限给到你要登录的用户 USER_NAME 上:

sudo usermod -a -G openmediavault-admin USER_NAME

参考:https://forum.openmediavault.org/index.php?thread/45443-omv6-web-gui-only-with-dashboard-lost-everything-and-i-m-admin-user/

# /dev/dm-* 文件系统

dm 是 Device Mapper 的缩写,Device Mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略,当前比较流行的 Linux 下的逻辑卷管理器如 LVM2(Linux Volume Manager 2 version)、EVMS (Enterprise Volume Management System)、dmraid (Device Mapper Raid Tool) 等都是基于该机制实现的。

既然是映射,那么就有对应关系,那到底对应着什么,可以使用如下命令查看:

  1. dm-* 一般是在 /dev 文件夹里,而且还不止一个,可以使用 ls /dev/dm* 查看所有 dm 设备映射。
  2. 使用命令 dmsetup ls 查看 dm-* 对应的设备,其中 dm 后面的数字对应(xxx, xx)里的第二个数字。如果想详细查看信息,可以使用 dmsetup info 命令,而 Major, minor: 对应 (xxx, xx)。
  3. 输入 more /etc/fstab 命令查找对应关系,如此便能找到映射点。

# 挂载新硬盘文件系统失败

这里导致出现的问题是新硬盘替换旧硬盘,然后旧硬盘可能有共享、引用之类的,因此在旧硬盘不存在的情况下,当你为新硬盘建立了文件系统后,并为其挂载保存的的时候,会出现无法保存并挂载成功,这时候就必须先把旧的不存在的硬盘的文件系统卸载掉先,否者会影响新的文件系统挂载;而如果旧的文件系统是有使用共享服务的,那么需要根据其依赖关系( 磁盘 -> 文件系统 -> 共享文件夹 -> 服务(SMB, FTP等) )逐步解除并保证卸载成功,这样才可以为新的硬盘挂载文件系统。

# 手动测试硬盘

  1. 使用 smartctl 分析硬盘
    • smartctl -i /dev/sdxy 显示磁盘基本信息。
    • smartctl -H /dev/sdxy 显示硬盘的健康状况。
    • smartctl -A /dev/sdxy 显示硬盘的详细信息。
    • smartctl -t short /dev/sdxy 后台检测硬盘,消耗时间短,用第二条命令查看结果。
    • smartctl -t long /dev/sdxy 后台检测硬盘,消耗时间长,用第二条命令查看结果。
    • smartctl -l selftest /dev/sdxy 显示硬盘检测日志。
    • smartctl -l error /dev/sda 显示硬盘错误汇总。
  2. 使用 badblocks 扫描硬盘
    • badblocks -sv -o ~/sdxy_blocks.txt /dev/sdxy 前台显示扫描进度,并将结果保存到文档上。
  3. 使用 hdparm 测硬盘读速
    • hdparm -Ttv /dev/sdxy 该命令将显示磁盘的缓存和读性能。
    • hdparm -tv --direct /dev/sdxy 添加 --direct 选项将绕过硬盘驱动器的缓冲区高速缓存,从而直接从磁盘读取。
  4. 使用 dd 测硬盘写速
    • sync; dd if=/dev/zero of=/srv/dev-disk-by-uuid-xxx/tempfile bs=1M count=5120; sync 以 1MByte 为单位,写入 5120 次,即写入往 tempfile 文件写入 5GB 大小的零数据值。
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

夏沫の浅雨 微信支付

微信支付

夏沫の浅雨 支付宝

支付宝