Ceph Dashboard 重置密码
这里主要指的是忘记了现在的密码,需要强制修改。
首先登录 Mon 机器。
在一个文件内写入新密码,例如:
1vim passwd.txt
在里面写上密码,注意就直接密码,不需要任何格式。文件名也没有任何要求,随便起。
然后执行:
1ceph dashboard ac-user-set-password <username> -i <file> [--force-password]
username:用户名,比如管理员默认的 admin。
file:刚刚创建的包含了新密码的文件。
--force-password:强制修改,不加的话弱密码会被拒绝。
Ceph Pacific(16.2.z) Pool 常用操作
参考文档:
https://docs.ceph.com/en/pacific/rados/operations/pools/
https://docs.ceph.com/en/pacific/rados/operations/erasure-code/
1. 主要概念池(Pool)是用于存储对象的逻辑分区。
池提供以下几个特性:
弹性(Resilience,指恢复数据的能力):
对于副本池,弹性的定义为,可以保证发生故障而不丢失任何数据的 OSD 的数量。在多副本策略的池中,这个保证不丢失数据的 OSD 数量就是副本数量。
对于纠删码池,弹性的定义为,编码块的数量(例如,纠删码配置文件中的 m = 2)。
PG(Placement Group,放置组):
一个池存储了很多很多对象,为了更好的管理这些对象,Ceph 会把这些对象进行分组,每个组就是一个 PG。
一个池可以有很多 PG,每个 PG 只能归属一个池。
当多个池使用相同的 OSD 时,我们需要确保每个 OSD 的 PG 副本总和处于每个 OSD 所需的 PG 数量范围内。
典型配置的目标是每个 OSD 大 ...
Ubuntu 20.04 物理机集群部署 Ceph Pacifix (16.2.z)
本文将部署的 Ceph 版本为 Pacific (16.2.15)。
本文环境有三台机器,信息如下:
序号
Hostname
IP
Linux 发行版
Linux 内核
1
hostname1.cn
10.38.214.1
Ubuntu 20.04.2 LTS (Focal Fossa)
5.4.54-2
2
hostname2.cn
10.38.214.2
Ubuntu 20.04.2 LTS (Focal Fossa)
5.4.54-2
3
hostname3.cn
10.38.214.3
Ubuntu 20.04.2 LTS (Focal Fossa)
5.4.54-2
注:写这篇文章时我是使用公司机器操作的,所以对 hostname 和 ip 进行了替换,但对文章内容的理解应该没有影响。
参考文档:https://docs.ceph.com/en/pacific/install/
1. Ceph 管理工具 Cephadm1.1. Cephadm 简介安装 Ceph 的方法很多,本文使用官方最推荐的 Cephadm 工具进行。
官方是这样描述 Ce ...
fio smalloc OOM 问题记录
今天使用 fio 3.9 测试文件系统的时候,遇到了一个报错:
12smalloc: OOM. Consider using --alloc-size to increase the shared memory available.fio: filesetup.c:1482: alloc_new_file: Assertion `0' failed.
并不复杂,smalloc 分配共享内存失败了,OOM 错误,但是我机器的内存是足够大的:
1234$ free -h total used free shared buff/cache availableMem: 125G 15G 19G 4.7G 90G 103GSwap: 0B 0B 0B
所以并不是物理机内存不足的问题,我们看一下 fio 提示的解决方案,参数 --alloc-size 的解释:
123 ...
Ubuntu 20.04 编译运行 Ceph v16.2.15
1. Linux 发行版本和 Ceph 版本的选择下表是 Ceph 官方提供的 Ceph 版本与 Linux 系统版本的支持表格:
Reef (18.2.z)
Quincy (17.2.z)
Pacific (16.2.z)
Octopus (15.2.z)
Centos 7
A
B
Centos 8
A
A
A
A
Centos 9
A
Debian 10
C
C
C
Debian 11
C
C
C
OpenSUSE 15.2
C
C
C
OpenSUSE 15.3
C
C
Ubuntu 18.04
C
C
Ubuntu 20.04
A
A
A
A
Ubuntu 22.04
A
其中 A、B、C 的含义如下:
A: Ceph 提供软件包,并对其中的软件进行了全面的测试。
B: Ceph 提供软件包,并对其中的软件进行了基本测试。
C: Ceph 仅提供软件包,尚未对这些版本进行任何测试。
写这篇文章时,Ceph 19 刚刚发布,业内普遍使用的还是 16.2.z,16.2.15 是 16.2. ...
Ubuntu 22.04 中根目录 / 空间小于实际磁盘空间问题解决
1. 问题场景今天创建了一个 Ubuntu 22.04 的虚拟机,分配了磁盘为 100GB,但在系统里看却只有 48 GiB。
2. 问题分析我们查看一下文件系统的挂载情况:
12345678$ df -ThFilesystem Type Size Used Avail Use% Mounted ontmpfs tmpfs 791M 1.7M 789M 1% /run/dev/mapper/ubuntu--vg-ubuntu--lv ext4 48G 12G 35G 25% /tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shmtmpfs tmpfs 5.0M 0 5.0M 0% /run/lock/dev/sda2 ext4 2.0G 12 ...
解决 rm 命令报错参数过多的问题
有些时候我们想删除一个目录内的全部内容,但是由于 rm 命令也是有参数数量上限的,所以直接删除会报错。
比如我想删除 mnt/ 目录下的所有文件:
12$ rm mnt/*-bash: /bin/rm: Argument list too long
解决方法:
使用 find 命令结合 xargs:
1find mnt/ -type f -exec rm {} +
这个命令会使用 find 查找 mnt/ 目录下的所有文件,并将它们作为参数传递给 rm 命令。+ 表示将尽可能多的文件传递给 rm 以避免参数列表过长。
使用 find 命令结合 xargs 和 rm:
1find mnt/ -type f | xargs rm
这个命令会使用 find 查找 mnt/ 目录下的所有文件,并将它们通过管道传递给 xargs rm 命令,以删除这些文件。
各个系统配置命令行代理的方式
假设代理的协议为 http,地址为 127.0.0.1,端口为 10809。
那么,在不同系统下,配置命令行代理的方式如下:
Unix 系统(Linux、macOS 等)
12export http_proxy=http://127.0.0.1:10809export https_proxy=http://127.0.0.1:10809
Windows 系统
CMD
12set http_proxy=http://127.0.0.1:10809 set https_proxy=http://127.0.0.1:10809
PowerShell
12$env:http_proxy = "http://127.0.0.1:10809" $env:https_proxy = "http://127.0.0.1:10809"
Git Bash:与 Unix 系统一样
12export http_proxy=http://127.0.0.1:10809export https_proxy=http://127.0.0.1:10809
Linux 增量文件传输工具 rsync 的常用方法
1. 什么是 rsync ?rsync 是一个提供快速增量文件传输的开源实用程序。
rsync 可以在本地与远程机器之间同步文件或目录,并且只传输已更改或新增的部分,从而大幅度减少数据传输的时间和带宽消耗。
本文仅介绍 rsync 的常用方法,个人认为已足够覆盖工作中的各类场景,更多高级功能读者可自行查阅 rsync 官方文档,
2. rsync 的基本命令官方文档中将 rsync 命令的使用分了三类:
1. 本地使用:
1rsync [OPTION...] SRC... [DEST]
2. 通过远程 shell 访问:
1234Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
3. 通过 rsync daemon 访问(后面会具体说什么是 rsync daemon):
123456Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] r ...
Golang 使用 urfave/cli 开发命令行工具的基本方法
1. 从一个项目模板开始首先创建一个目录,目录结构如下:
123go-cli-example└── cmd └── cmd.go
我这里项目名字为 “go-cli-example”。
在项目根目录执行 go mod 初始化操作,我这里为:
1go mod init go-cli-example
我这里是随意起的项目名字,如果你的是正常的可维护项目,“go-cli-example” 可能应当替换为形如 “github.com/gukaifeng/go-cli-example” 这样。
我这里 cmd.go 就是入口文件了,我们先从一个 urfave/cli 模板开始:
123456789101112131415161718192021package cmdimport ( "fmt" "os" "github.com/urfave/cli/v2")func main() { app := &cli.App{ Name: "greet", Usage: "say ...