我的技术笔记

记录技术历程

在 Windows 11 平台上安装 Docker Desktop
选择 WSL2 安装完成,发现没有出现镜像存储位置的配置。
好吧~我避免系统盘空间不足或后续重装,那就自己动手调整一下。

检查 docker 状态,关闭 docker

启动 Windows Terminal 或 PowerShell,输入 wsl 状态查询命令

1
wsl -l -v --all

执行后可以看到 docker-desktop 和 docker-desktop-data 的状态是 Running ,如下图所示:

Docker 关闭前状态

现在,先退出 docker

在 Windows 任务栏右下角,右键点击 docker-desktop 任务图标,在菜单里选择 “Quit Docker Desktop”

Docker 关闭任务栏

退出后,我们再运行一下状态查询命令,等待查询状态变成 Stopped 就表示 docker 已关闭

Docker 关闭后状态

导出 WSL 中的 docker

准备导出到 D:\wsl-docker\ 目录下

1
wsl --export docker-desktop D:\wsl-docker\docker-desktop.tar
1
wsl --export docker-desktop-data D:\wsl-docker\docker-desktop-data.tar

导出命令执行完成后,在 D:\wsl-docker\ 可以看到 docker-desktop.tar docker-desktop-data.tar

Docker 导出接口

从 WSL 中注销现有的 docker

1
wsl --unregister docker-desktop
1
wsl --unregister docker-desktop-data

注销现有的 docker

重建 WSL 中的 docker

新建的 WSL 的 Docker 存储在 G:\wsl-docker 目录下

1
wsl --import docker-desktop G:\wsl-docker\docker-desktop D:\wsl-docker\docker-desktop.tar --version 2
1
wsl --import docker-desktop-data G:\wsl-docker\docker-desktop-data D:\wsl-docker\docker-desktop-data.tar --version 2

导入完成后,启动 Docker Desktop ,查询状态如下:

重建 docker 状态

因存在 Windows 与 Ubuntu 共享文件的需求,尝试在 Ubuntu 上搭建 Samba

安装

1
sudo apt-get install samba

配置

创建共享文件夹

1
2
3
4
# 新建共享目录
sudo mkdir /opt/android-lan-share
# 设置目录权限
sudo chmod 777 /opt/android-lan-share

Samba

打开配置文件

1
sudo vim /etc/samba/smb.conf  

追加 /opt/android-lan-share 共享文件目录配置

1
2
3
4
5
6
7
8
9
10
11
12
[android.lan.share]
comment = android lan share
browseable = yes
path = /opt/android-lan-share
create mask = 0700
directory mask = 0700
valid users = android
force user = android
force group = android
public = yes
available = yes
writable = yes

Samba - 用户

Linux 账号-新建

1
sudo useradd android

Samba 账号

1
sudo smbpasswd -a android

重启验证配置

1
sudo service smbd restart

扩展

查看 Samba 服务中的用户列表

1
sudo pdbedit -L

删除 Samba 服务中的特定用户

1
sudo smbpasswd -x 用户名

删除 Linux 特定用户

1
sudo userdel 用户名

删除 Linux 中 特定用户 所有信息

1
sudo userdel -r 用户名

Systemd 统一管理所有 Unit 的日志。journalctl 查看所有日志(内核日志和应用日志)。

配置文件是

1
/etc/systemd/journald.conf

查看所有日志

默认情况下 ,只保存本次启动的日志

1
sudo journalctl

查看内核日志

不显示应用日志

1
sudo journalctl -k

查看系统本次启动的日志

1
sudo journalctl -b

1
sudo journalctl -b -0

查看上一次启动的日志

需更改设置

1
sudo journalctl -b -1

查看指定时间的日志

1
sudo journalctl --since="2012-10-30 18:17:16"
1
sudo journalctl --since "20 min ago"
1
sudo journalctl --since yesterday
1
sudo journalctl --since "2015-01-10" --until "2015-01-11 03:00"
1
sudo journalctl --since 09:00 --until "1 hour ago"

显示尾部的最新10行日志

1
sudo journalctl -n

显示尾部指定行数的日志

1
sudo journalctl -n 20

实时滚动显示最新日志

1
sudo journalctl -f

查看指定服务日志

1
sudo journalctl /usr/lib/systemd/systemd

查看指定进程日志

1
sudo journalctl _PID=1

查看某个路径的脚本日志

1
sudo journalctl /usr/bin/bash

查看指定用户日志

1
sudo journalctl _UID=33 --since today

查看某个 Unit 的日志

1
sudo journalctl -u nginx.service

带时间范围控制

1
sudo journalctl -u nginx.service --since today

实时显示某个 Unit 的最新日志

1
sudo journalctl -u nginx.service -f

合并多个 Unit 的日志

1
journalctl -u nginx.service -u php-fpm.service --since today

查看指定优先级日志

1
sudo journalctl -p err -b

共有8级

  1. emerg
  2. alert
  3. crit
  4. err
  5. warning
  6. notice
  7. info
  8. debug

日志默认分页输出,–no-pager 改为正常的标准输出

1
sudo journalctl --no-pager

JSON 输出 (单行)

1
sudo journalctl -b -u nginx.service -o json

JSON 输出 (多行)

1
sudo journalctl -b -u nginx.serviceqq -o json-pretty

日志文件占用硬盘空间

1
sudo journalctl --disk-usage

指定日志文件最大空间

1
sudo journalctl --vacuum-size=1G

指定日志文件保留时长

1
sudo journalctl --vacuum-time=1years

创建服务

运行目录

1
2
sudo mkdir /opt/nfs-mount-239.service
cd /opt/nfs-mount-239.service

启动 Shell

1
sudo vim start.sh
1
2
3
#!/bin/bash
# mount nfs
mount -t nfs 10.0.0.239:/opt/gitlab-runner/android-sdk /mnt/android-sdk-remote-nfs -o nolock
1
sudo chmod +x start.sh

停止 Shell

1
sudo vim stop.sh
1
2
3
#!/bin/bash
# umount nfs
umount /mnt/android-sdk-remote-nfs
1
sudo chmod +x stop.sh

配置文件

1
sudo vim /lib/systemd/system/nfs-mount-239.service

Unit 配置参考文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=mount nfs from 10.0.0.239
Wants=network-online.target
BindsTo=nfs-client.target
After=ssh.service

[Service]
WorkingDirectory=/opt/nfs-mount-239.service
ExecStart=/opt/nfs-mount-239.service/start.sh
Restart=on-failure
ExecReload=/opt/nfs-mount-239.service/stop.sh
RestartSec=10

[Install]
WantedBy=multi-user.target
Alias=nfs-mount-239

配置

配置文件修改后,让 SystemD 重新加载配置文件

1
sudo systemctl daemon-reload

检查服务状态

1
sudo systemctl status nfs-mount-239

启动服务

1
sudo systemctl start nfs-mount-239

停止服务

1
sudo systemctl stop nfs-mount-239

设置开机启动

1
sudo systemctl enable nfs-mount-239

禁止开机启动

1
sudo  systemtl disable  nfs-mount-239

检查开机启动配置结果

1
sudo systemctl is-enabled nfs-mount-239

enable、disable或static,这里的 static 它是指对应的 Unit 文件中没有定义[Install]区域,因此无法配置为开机启动服务。

调试 & 分析

日志

启动顺序

1
systemd-analyze plot > boot.svg

启动耗时

1
systemd-analyze blame

NFS 即网络文件系统(Network File-System)

因文件夹需要在不同 Linux 设备上同步的原因,又想偷个懒。

安装

安装 NFS服务器端

1
sudo apt-get install nfs-kernel-server

安装 NFS客户端

1
sudo apt-get install nfs-common

配置

配置格式说明

DIR IP(读写权限,sync,no_root_squash)

DIR

共享目录

IP

所有 ping 通该主机的用户 : *
指定网段,在该网段中的用户可以挂载 : 192.168.1.*
指定IP用户能挂载 : 192.168.1.12

读写权限

ro : 只读
rw : 读写

sync

同步

no_root_squash

不降低root用户的权限

打开 NFS 配置文件

1
sudo vim /etc/exports
1
/opt/gitlab-runner/android-sdk 10.0.2.240(rw,sync,no_root_squash)

验证

1
sudo mount -t nfs 10.0.0.239:/opt/gitlab-runner/android-sdk /mnt/android-sdk-remote-nfs -o nolock

连接到个人目录下

1
ln -s /mnt/android-sdk-remote-nfs /home/ubuntu/Android/sdk-remote

手动挂载成功后,就可以配置为服务开机启动(systemd)

测试读写速度

在当前目录下,以 io-test.dbf 文件来测试读写性能

1
time dd if=/dev/zero of=io-test.dbf bs=4k count=10000

Windows 挂载

挂载块大小指定为 64KB

1
mount \\192.168.55.88\mnt\ceph\data\Android -o rsize=64,wsize=64,iocharset=utf8,timeo=15  X:\

卸载

1
umount X:

NFS 默认 uid、gid 修改为 1055

NFS共享目录挂载时uid和gid均为-2,而NFS服务的默认 uid 和 gid 为 65534,因此此时仅有共享目录的读权限。

修改注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default
添加DWORD值两项:AnonymousUid,AnonymousGid ,选择10进制,填入 1055

重启 NFS 服务

1
sudo /etc/init.d/nfs-kernel-server restart
0%