# Debian 安装
需要注意的几个点是:
- 安装语言的时候选择英文安装,否者会造成部分乱码,至于后面想要使用中文,安装完成后再配置就好了。
- 配置软件包不需要选择网络镜像,后期再配置镜像源。
- 勾选 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
:
Governor | Description |
---|---|
performance | Run the CPU at the maximum frequency, obtained from /sys/devices/system/cpu/cpuX/cpufreq/scaling_max_freq . |
powersave | Run the CPU at the minimum frequency, obtained from /sys/devices/system/cpu/cpuX/cpufreq/scaling_min_freq . |
userspace | Run the CPU at user specified frequencies, configurable via /sys/devices/system/cpu/cpuX/cpufreq/scaling_setspeed . |
ondemand | Scales the frequency dynamically according to current load. Jumps to the highest frequency and then possibly back off as the idle time increases. |
conservative | Scales the frequency dynamically according to current load. Scales the frequency more gradually than ondemand. |
schedutil | Scheduler-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 种: freeze
、 mem
、 disk
。
在 linux 中,有两个比较特殊的 Suspend 管理,那就是 mem
和 disk
,分别是 Suspend to RAM(挂起到内存,通称睡眠) 和 Suspend to disk(挂起到硬盘,通称休眠) 这两种电源管理模式,它们默认使用的 ACPI 定义如下:
Suspend to RAM(挂起到内存,通称睡眠)
ACPI 定义的 S3 睡眠状态。通过将机器中大多数和 RAM 不相关的部件断电来工作,RAM 是恢复机器状态所必需的。由于可以节省大量电力,建议笔记本电脑在使用电池运行且盖子关闭时(或用户在一段时间内处于非活动状态)自动进入此模式。
Suspend to disk(挂起到硬盘,通称休眠)
ACPI 定义的 S4 睡眠状态。将机器状态保存到交换空间并关闭机器。再次开机后,恢复状态。直到开机前,机器都不会有任何待机功耗。
note:实际上, mem
和 disk
是由它们对应的配置文件决定的,但一般默认会使用上面的 ACPI 状态。
对于 mem
和 disk
的控制:
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 的系统目录结构:
文件夹 | 英文全称 | 文件夹作用 |
---|---|---|
/boot | Boot | 存放的启动 Linux 时使用的内核文件,包括连接文件以及镜像文件。 |
/bin | Binaries | 存放着最常用的程序和指令,所有用户都可以执行。是 /usr/bin 目录的软连接。 |
/sbin | Super User Binaries | 保存和系统环境设置相关的命令,只有超级用户可以使用这些命令,有些命令可以允许普通用户查看。是 /usr/sbin 目录的软连接。 |
/usr | Unix Software Resources | 用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。 |
/usr/bin | Unix Software Resources Binaries | 系统用户使用的应用程序与指令。 |
/usr/sbin | Unix Software Resources Superuser Binaries | 超级用户使用的比较高级的管理程序和系统守护程序。 |
/usr/local | Unix Software Resources Local | 安装第三方软件的安装目录,一般是通过编译源码的方式安装的程序。 |
/usr/src | Unix Software Resources Source | 内核源代码默认的放置目录。 |
/dev | Devices | 存放的是 Linux 的外部设备。注意:在 Linux 中访问设备和访问文件的方式是相同的。 |
/etc | Editable Text Configuration Chest | 存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。 |
/opt | Optional Application Software Packages | 可选应用软件包,第三方安装的软件保存位置,存放软件安装包。 |
/lib | Library | 存放基本代码库(比如 c++ 库),其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。 |
/proc | Processes | 虚拟文件系统,数据保存在内存中,存放当前进程信息 |
/root | Root | 系统管理员的用户主目录。 |
/tmp | Temporary | 存放临时文件 |
/var | Variable | 存放经常修改的数据,比如程序运行的日志文件( /var/log 目录下)。 |
/home | Home | 用户缺省宿主目录。 |
/lost+found | Lost And Found | 一般情况下为空的,存放一些系统出错的检查结果 |
/srv | Server | 服务数据目录 |
/sys | System | 这是 linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs。sysfs 文件系统集成了下面 3 种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中。 |
/mnt | Mount | 挂载目录。临时文件系统的安装点,默认挂载光驱和软驱的目录 |
/media | Media | 挂载目录。 挂载媒体设备,如软盘和光盘 |
/misc | Miscellaneous Device | 挂载目录。 挂载 NFS 服务 |
/run | Run | 里面的东西是系统运行时需要的,不能随便删除。当系统重启时,这个目录下的文件应该被删掉或清除;下次系统运行时重新生成。 |
备份系统:
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
以获取当前的网络配置。 如果以不同的方式配置网络(例如通过 systemd
或 NetworkManager
),则不会填充数据库,并且不包含使用 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-admin
的 ssh 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 为例:
准备两个硬盘,最好使用同型号的不同批次跟产期的,如果选择不同型号的,那么要考虑转速、缓存、容量这些尽可能一致。
lsblk
获取需要建立 Raid 的磁盘名称sdx
(sdx 可以为 sda、sdb 等)。使用
fdisk /dev/sdx
分别为两块磁盘创建单一分区。m
:查看命令操作。d
:删除已有分区。n
:创建新的分区。p
:查看创建分区。w
:应用分区信息。
按 n 创建新的分区。
然后按 p 选择主分区。
接下来选择分区号为 1。
按两次回车键默认将整个容量分配给它。
然后,按 p 来打印创建好的分区。
按 l,列出所有可用的类型。
按 t 修改分区类型。
键入 29 设置为 Linux 的 RAID 类型,然后按 Enter 确认。
然后再次使用 p 查看我们所做的更改。
使用 w 保存更改。
利用
mdadm
命令建立 Raid 软阵列。检查 sdx 分区并确认 Raid 分区的类型
mdadm -E /dev/sdx
。假设用
dev/sdb1
和dev/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 0 | RAID 0 是组建磁盘阵列中最简单的一种形式,只需要 2 块以上的硬盘即可。 RAID 0 是 RAID 磁盘阵列中性能最好的硬盘组合方式,但没有提供冗余或错误修复能力。 | 按照一定规则,将文件拆分存储在 RAID 0 中,一旦一块硬盘损坏,整个 RAID 0 的所有数据全部丢失。 |
RAID 1(镜像) | RAID 1 称为磁盘镜像,由至少 2 块硬盘组成。原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件。只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行。它是 RAID 磁盘阵列中性能最差,数据安全性最佳的。 | 会损失一半硬盘容量。 |
RAID 5 | RAID 5 被称为 “分布式奇偶校验的独立磁盘结构” ,需最低 3 块硬盘组成。<br/> 每在 RAID 5 中存入一个文件,3 块硬盘中:1 块用于存储该文件;2 块用于生成奇偶校验信息。 | 只要 RAID 5 中只有 1 块硬盘损坏,就可以替换该硬盘并恢复数据;会损失 1 块硬盘容量。 |
RAID 6 | RAID 6 是对 RAID 5 的扩展,需最低 4 块硬盘组成。<br/> 每在 RAID 6 中存入一个文件,4 块硬盘中:2 块用于存储该文件;2 块用于生成奇偶校验信息。 | 只要 RAID 6 中有任意 2 块硬盘损坏,就可以替换这 2 块硬盘并恢复数据;会损失 2 块硬盘容量。 |
RAID 10 | RAID 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。
如果网络不好可以手动安装:
- 进入 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 -xe
和 dockerd --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 |
然后是步骤拆解:
ip -6 addr show eth0
,显示网卡(eth0)的全部 ipv6 地址grep -v deprecated
,去除已经失效(deprecated)的地址grep 'inet6 [^f:]'
,显示有 ipv6 地址的那一行(不包含 f 开头的内网 ipv6 地址)awk -F' ' '{print $2}'
,根据空格符号分列,打印第二列awk -F'/' '{print $1}'
,根据斜杠符号 / 分列,打印第一列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) 等都是基于该机制实现的。
既然是映射,那么就有对应关系,那到底对应着什么,可以使用如下命令查看:
dm-*
一般是在/dev
文件夹里,而且还不止一个,可以使用ls /dev/dm*
查看所有dm
设备映射。- 使用命令
dmsetup ls
查看dm-*
对应的设备,其中dm
后面的数字对应(xxx, xx)里的第二个数字。如果想详细查看信息,可以使用dmsetup info
命令,而Major, minor:
对应 (xxx, xx)。 - 输入
more /etc/fstab
命令查找对应关系,如此便能找到映射点。
# 挂载新硬盘文件系统失败
这里导致出现的问题是新硬盘替换旧硬盘,然后旧硬盘可能有共享、引用之类的,因此在旧硬盘不存在的情况下,当你为新硬盘建立了文件系统后,并为其挂载保存的的时候,会出现无法保存并挂载成功,这时候就必须先把旧的不存在的硬盘的文件系统卸载掉先,否者会影响新的文件系统挂载;而如果旧的文件系统是有使用共享服务的,那么需要根据其依赖关系( 磁盘
-> 文件系统
-> 共享文件夹
-> 服务(SMB, FTP等)
)逐步解除并保证卸载成功,这样才可以为新的硬盘挂载文件系统。
# 手动测试硬盘
- 使用 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
显示硬盘错误汇总。
- 使用 badblocks 扫描硬盘
badblocks -sv -o ~/sdxy_blocks.txt /dev/sdxy
前台显示扫描进度,并将结果保存到文档上。
- 使用 hdparm 测硬盘读速
hdparm -Ttv /dev/sdxy
该命令将显示磁盘的缓存和读性能。hdparm -tv --direct /dev/sdxy
添加--direct
选项将绕过硬盘驱动器的缓冲区高速缓存,从而直接从磁盘读取。
- 使用 dd 测硬盘写速
sync; dd if=/dev/zero of=/srv/dev-disk-by-uuid-xxx/tempfile bs=1M count=5120; sync
以 1MByte 为单位,写入 5120 次,即写入往 tempfile 文件写入 5GB 大小的零数据值。