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 ...
使用 mdtest 测试文件系统元数据性能
1. 什么是 IOR 和 mdtest ?IOR(Integrated Benchmark of Parallel I/O)是一种基准测试应用程序,旨在测试并评估并行文件系统的性能。它包含多个测试模式,可以测量一系列文件 I / O 操作的速度和可扩展性。IOR 主要使用 MPI 软件库来实现并行 I/O 操作。它可以测试并行读取和写入各种文件访问模式(例如单个大文件、多个小文件)时的并行文件系统性能。
mdtest 是一款基准测试程序,用来测试文件系统元数据操作的性能。它可以模拟大规模目录和文件的创建、重命名、删除等操作,通常是在高性能计算环境中使用。使用 mdtest 可以帮助用户评估存储系统文件操作的性能,以便更好地优化存储系统的设计和配置。它通常作为文件系统测试套件中的一部分,如 IOR、IOZone 和 FIO 等工具。
IOR 通常被用来测试大文件的读写性能。例如,可以使用 IOR 测试并行文件系统的顺序读写能力、随机访问能力、并行度和带宽。这对于优化大规模应用程序和大规模数据中心中存储层的性能非常重要。
MDTest 通常被用来测试并行文件系统在处理许多小文件时的性 ...
fio 测试存储系统 I/O 性能
1. 什么是 fio ?fio(Flexible I/O Tester)是一个用于测试和评估 I/O 负载和性能的工具,具有高度的可配置性和灵活性。它可以模拟不同类型的负载,包括随机和顺序读写,随机和顺序混合读写,随机和顺序的深度嵌套目录结构等,同时可以产生各种不同的 I/O 负载模式,例如随机性、对齐和分配大小、顺序性等特征,以便更好地模拟实际应用程序中的 I/O 负载。fio 在评估和比较存储系统方面非常有用,例如硬盘驱动器、固态硬盘、闪存存储器、网络存储器等。 - ChatGPT
本文主要介绍在 Linux 上使用 fio 测试磁盘/文件系统的性能,fio 的其他功能本文不关注。对磁盘和文件系统的测试可以认为是一回事,因为文件系统挂载后在使用方面与本地磁盘没有什么区别,所以本文不会仔细区分这两个场景。
本文所使用的是系统为 CentOS 8.4.2105,其他发行版与本文可能会有出入,本文不做解释,可自行查看文档 fio - Flexible I/O tester。
2. 安装 fio安装 fio 有几种常用方法,可以直接通过包管理工具(如 yum、dnf 等)安装,或者是手动 ...
CubeFS 快速单机部署试用
注意:
CubeFS 是一个分布式文件系统,是应当部署在集群上的。
本文仅针对纯小白第一次上手,目的是让纯小白可以快速部署好 CubeFS 并使用。
本文不会对 CubeFS 的各种配置项做说明解释,只是给出一个固定的操作过程,使 CubeFS 快速运转起来。
真实的集群中的 CubeFS 的配置要复杂一些,但不会在本文中介绍。
本文也是我作为纯小白,第一次试用 CubeFS 的过程记录。
1. 编译 CubeFS1.1. 安装依赖123456yum install -y gcc-c++ \ go \ cmake \ zlib-devel \ bzip2-devel \ maven
这些依赖 yum 中的版本已经足够了,所以就直接这样装了,自己手动装更高版本也可以。
1.2. 克隆源码仓库克隆 CubeFS 源码仓库:
1git clone https://github.com/cubefs/cubefs.git
进入 CubeFS 源码 ...
Golang 分割字符串的几种方法
1. 按单个分隔字符串分割按单个分隔符或分隔字符串分割可使用 Split() 函数,声明如下:
1func Split(s, sep string) []string
1func Split(s, sep []byte) [][]byte
两个方法是一样的,只是操作的字符串类型一个是 string 一个是 []byte。
我们以操作 string 的方法为例:
1234567891011121314package mainimport ( "fmt" "strings")func main() { fmt.Printf("%q\n", strings.Split("a,b,,,c", ",")) fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a ")) fmt.Printf("%q\n", strings.Split ...