「Kylin」- 麒麟、操作系统、银河麒麟

Kylin 4.0.2(Ubuntu 16)
DISTRIB_ID=Kylin DISTRIB_RELEASE=4.0.2 DISTRIB_CODENAME=juniper DISTRIB_DESCRIPTION=”Kylin 4.0.2″ DISTRIB_KYLIN_RELEASE=4.0-2SP2 DISTRIB_VERSION_TYPE=enterprise DISTRIB_VERSION_MODE=normal
激活系统
操作系统需要激活,功能相同,但是激活系统会得到官方的服务支持;
软件仓库
官方仅提供镜像下载,而软件安装需要本地挂载操作系统镜像;
从版本上看,部分软件包与 Ubuntu 16.04 Xenial 版本类似:

# dpkg -l | grep ubuntu
ii curl 7.47.0-1ubuntu2 arm64 command line tool for transferring data with URL syntax
ii docker-ce 5:20.10.7~3-0~ubuntu-xenial arm64 Docker: the open-source application container engine
ii docker-ce-cli 5:20.10.7~3-0~ubuntu-xenial arm64 Docker CLI: the open-source application container engine
ii git 1:2.7.4-0ubuntu1 arm64 fast, scalable, distributed revision control system
ii git-man 1:2.7.4-0ubuntu1 all fast, scalable, distributed revision control system (manual pages)
ii libasn1-8-heimdal:arm64 1.7~git20150920+dfsg-4ubuntu1 arm64 Heimdal Kerbero[……]

READ MORE

「ubuntu-18.04-desktop-amd64」

内容简介
# cat boot/grub/grub.cfg

if loadfont /boot/grub/font.pf2 ; then
set gfxmode=auto
insmod efi_gop
insmod efi_uga
insmod gfxterm
terminal_output gfxterm
fi

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

set timeout=5
menuentry “Try Ubuntu without installing” {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash —
initrd /casper/initrd.lz
}
menuentry “Install Ubuntu” {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity quiet splash —
initrd /casper/initrd.lz
}
menuentry “OEM install (for manufacturers)” {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity quiet splash oem-config/enable=true —
initrd /casper/initrd.lz
}
menuentry “Check disc for defects” {
set gfxpayload=keep
linux /casper/vmlinuz boot=casper integrity-check quiet splash —
initrd /casper/initrd.lz
}

# cat isolinux/isolinux.cfg

# D-I config version 2.0
# search path[……]

READ MORE

「Linux」- 关于关于升级的经验与教训

问题描述
该文档将记录:在软件升级过程中,遇到的问题,以及应该尽量遵守的准则。
常见问题
升级跨度大,是件危险的事情
如果升级跨度大,比如跨过很多次版本号,会带来如下问题:
1)将跳过某些动作:每次官方的更新脚本可能都会执行某些升级动作,而跨版本升级,可能会跳过这些升级动作。在 GitLab 中,官方甚至给出升级路线,因此只能进行多次升级。
升级内容多,让问题变得复杂
如果升级内容多,比如很多相关的依赖都需要升级,会带来如下问题:
1)破坏依赖关系:某些服务具有非常多插件(比如 Jenkins 服务),直接升级所有插件会破坏依赖关系。因此,我们因该进行多次插件升级,而每次进行少量插件升级。
我们的升级策略
在升级前,进行数据备份
在服务运维中,不管是否升级,都应该进行数据备份。当升级失败后,我们能够快速回滚到原先的版本。
频繁升级,但非最新版本
现在(# 07/30/2021),软件的更新速度越来越快(多亏 DevOps 发展),某些软件半个月就会发个新版本。如果不紧跟步伐(也不至于步步紧逼),那很可能将来无法升级(比如,找不到官方文档,升级包,相关资源等等问题)。
虽然频繁升级,但是我们也并非使用最新版本。比如 GitLab 出现 13.6 版本,那我们可能只会升级到 13.4 版本,然后关注 13.5 及 13.6 相关的问题,最后再决定是否需要升级。[……]

READ MORE

「Linux」- 备份与恢复

Hot Backup / Code Backup
热备份
热备份是指(具有如下特征): 1)当两台设备在确定 Primary(主用设备)和 Backup(备用设备)的关系后,由 Primary 进行业务的转发,而 Backup 处于监控状态, 2)同时 Primary 实时向 Backup 发送状态信息和需要备份的信息,以保证两台设备数据(状态)一致; 3)当 Primary 出现故障后,Backup 及时接替 Primary 的业务来继续运行;
全量备份(Full Backups)
什么是全量备份?全量备份是将每个文件写入备份媒体的一种备份方式。如果正在备份的数据永远不会更改,则创建的每个全量备份都将是相同的。这种相似性是由于全量备份不会检查自上次备份以来文件是否已更改;它会盲目地将所有内容写入备份媒体,无论它是否已被修改。
工具
dd、cpio、dump/restore
优点
1)数据恢复速度快; 2)备份和恢复操作都比较简单;
缺点
1)数据量大:每个文件都写入备份媒体。这意味着即使没有任何改变,也会使用大量备份媒体。每个晚上备份100千兆字节的数据时,可能有10兆字节的数据发生变化,这不是一个合理的方法; 2)占用的空间也会非常大; 3)备份时间长;
改进
为了改进这些缺点,我们选择创建增量备份的原因。
增量备份(Incremental Backups)
与完全备份不同,增量备份是指:

先进行一次完全备份。
在服务器运行一段时间后,检查当前数据和完全备份之间的差异,只备份存在差异的数据。
当服务器又运行一端时间后,开始进行第二次增量备份,将当前数据和上一次增量备份进行比较,只备份和上一次存在差异的数据;
以此类推…(通常情况下,会定期再进行一次全量备份,然后基于该新的全量备份再开始增量备份)

首先查看文件的修改时间是否比上次备份时间更新:

如果不是,则自上次备份以来文件未被修改,这次可以跳过。
另一方面,如果修改日期比上次备份日期更新,则表示该文件已被修改并应备份。

如下示意图:

增量备份与定期发生的全量备份一起使用。例如,每周进行全量备份,每日增量备份。
工具
rsync、dump/restore
优点
1)数据少; 2)耗时短;使用增量备份获得的主要优势是增量备份比完全备份运行得更快; 3)占用空间少;
缺点
1)恢复麻烦:还原任何给定文件可能意味着要经过一个或多个增量备份,直到找到该文件。还原完整文件系统时,必须还原上次全量备份和每次后续增量备份。这也是“定期再进行一次全量备份”的原因。
改[……]

READ MORE

「Linux」- 归档与压缩

Tar
Gzip
Xz
Bzip2
Zlib
ZIP zip 的压缩原理与实现
参考文献
Archiving and compression[……]

READ MORE

「7-Zip」- a file archiver with a high compression ratio

j7zip – a JAVA port of 7zr.exe
http://p7zip.sourceforge.net https://github.com/jamel/j7zip
p7zip – the Unix command-line port of 7-Zip
http://p7zip.sourceforge.net/
7z and 7za file archivers with high compression ratio
p7zip is the Unix command-line port of 7-Zip, a file archiver that handles the 7z format which features very high compression ratios.
p7zip-full provides utilities to pack and unpack 7z archives within a shell or using a GUI (such as Ark, File Roller or Nautilus).
Installing p7zip-full allows File Roller to use the very efficient 7z compression format for packing and unpacking files and directories. Additionally, it provides the 7z and 7za commands. . List of supported formats: – Packing / unpacking: 7z, ZIP, GZIP, BZIP2, XZ and TAR – Unpacking only: APM, ARJ, CAB, CHM, CPIO, CramFS, DEB, DMG, FAT,

HFS, ISO, LZH, LZMA, LZMA2, MBR, MSI, MSLZ, NSIS, NTFS, RAR (only
if non-free p7zip-rar package is installed), RPM, SquashFS, UDF,
VHD, WIM, XAR and Z.
.
The dependent package, p7zip, provides 7zr, a light version of 7za,
and p7zip, a gzip-like wrapper around 7zr.

从仓库中安装

#!/bin/sh

# Kali GNU/Linux Rolling
apt-get[……]

READ MORE

「tar」- 限制资源使用

问题描述
在使用 tar 进行解压时,会占用大量的系统资源(CPU,I/O),导致系统卡死或其他服务无法响应。尤其是压缩包较大且解压时间较久时,会直接导致其他服务不可用。在使用 tar 进行压缩时,虽然我们没有遇到类似问题,但是也可能存在这种问题。
我们希望找到一种方法限制 tar 所使用的系统资源,不管是打包还是压缩。
解决方法
方法一、(推荐)使用 pv 命令
pv,用于监控流经管道的数据的进度,它的角色类似于安装在水管上水表。虽然它不能限制特定程序的资源使用情况,但是它可以控制数据的读取速度。
(1)由 pv 负责读取数据,并通过选项控制 pv 的读取速度 (2)将数据写入管道 (3)而 tar 从管道中读取数据进行解压
方法二、使用空闲主机
如果有可能,则可以在空闲主机上进行操作,有必要则可以通过网络进行数据传回(比如使用 rsync 命令)。
方法三、使用 Docker 服务
有点大材小用,而且麻烦(需要安装环境),但是也算可用途径。
方法四、我们的方法
由于解压任务并非当务之急,我们有条件将工作放在夜间执行:

#!/bin/sh

sleep 4h && tar -xf someshit.tar.gz

参考文献
Preventing tar from using too much CPU and disk (old laptop crashes if 100%) Slowing down (limiting) tar, mysqldump or other processes to save IO bandwidth[……]

READ MORE

「Linux」- 解压 ZIP 文件,防止文件名乱码

问题描述
在 Windows 中,创建的 ZIP 文件,如果被压缩文件的文件名中包含非英文字符(比如“中文”),那么在 Linux 中解压时创建的文件名将是乱码。
该笔记将记录:在 Linux 中,如何解压在 Windows 下创建的 ZIP 文件,以防止文件名出现乱码。
解决办法
针对问题,理论上是与发行版无关的,但是鉴于各个发行版会选择不同版本的软件及不同的编译选项,所以实际情况还是会与发行版相关。
在 CentOS 中
可以直接使用 unzip 命令:

unzip -O gb18030 file.zip

在 Debian 中
按理说也能使用 unzip 命令,但是在 Debian 下的 unzip 命令,没有 -O 选项。
在 Debian 中,可以使用 unar 命令:

apt-get install unar
unar -e gb18030 file.zip

补充说明: 1)该方法试用与 Ubuntu 20.04 LTS(压缩包来自 Windows 7)
相关内容
[WIP] 这里需要了解一下字符集相关的内容。
参考文献
decompress ZIP with given encoding How can I avoid broken languages when unzipping unicode files?[……]

READ MORE

「Linux」- 磁盘冗余

问题描述
上个周(07/21/2019),当时我们正在使用 Git 拉取代码,笔记本的文件系统(Ext4)突然进入只读状态。当 dmesg 时,发现很多内核错误。我们承认我们找不到具体的原因,因为不具备这方面的知识。只能开机的时候,执行 fsck.ext4 进行文件系统检查,以尝试修复问题。
现在仅是文件系统出现问题,如果磁盘故障该怎么办?虽然关键的数据已备份,但是操作系统现已部署很多服务,届时所有环境都要重建,所有工具必须重装,从备份中还原数据。虽然关键数据没丢失,但是重新配置环境就将很麻烦。我们希望能够实现磁盘冗余,以应对此类问题。
该笔记将记录:在服务器(或桌面)环境中,我们如何进行磁盘冗余,以防止物理磁盘损坏而导致的数据损失(文件系统层面的数据备份不在该笔记讨论的范围之内)。
解决办法
硬件提供冗余
磁盘阵列卡
软件实现冗余
SOFTWRAE RAID、ZFS、LVM、Multipath with mdadm
针对笔记本环境
对于存储冗余,我们的笔记本有个硬盘位,还有个光驱位。光驱位改硬盘位,所以我们有两个硬盘位。弄两块大容量硬盘,完全可以做一个冗余。
接下来就是,看看解决方案有哪些,然后挑一个,搞起来。一主一备,注定会浪费磁盘。
TODO ! LAPTOP 磁盘冗余
参考文献
So How Should I Backup My Computer?[……]

READ MORE

「Linux」- 文件系统备份

问题描述
存储冗余主要是为了防止坏盘的场景。对于 文件系统损坏 的预防是另外一个问题。
有两点要考虑: 1)怎样防止因为「文件系统损坏」而导致的「数据丢失」?(目的:减少丢失) 2)另外,「文件系统损坏」会造成多大的「影响」呢?使用fsck工具来处理文件系统损坏,可能会导致近期的某些文件或变更丢失。
我们能想到的方法有两个: 1)通过文件定时备份来处理; 2)定时进行LVM快照;
这是本文将要讨论的问题:如何进行文件系统级别的备份,以防止「文件系统损坏」而导致的「数据丢失」。
解决办法
Deja Dup
是Debian或者Ubuntu中默认的备份工具。
TODO 关于笔记本文件系统的备份[……]

READ MORE

「Linux」- 配置文件备份

问题描述
在 Linux 下,进行配置文件文件备份。实现的功能: 1)对配置文件进行备份。备份工具可以使用rsync命令的复制功能。备份不能使用cp命令,主要是因为配置文件重名或者发生调整时,cp命令无法对原文件进行操作。 2)且能够自动对配置文件进行备份。自动备份可以使用Cron定时任务实现。 3)由版本控制,能切换到指定时间点。版本控制可以使用git。在Rsync同步结束后,执行git提交变更。 3)灾后,能够实现快速恢复服务。使用Rsync进行反向复制即可。
配置文件丢失或者无法恢复,真的非常要命。
需要说明的几点
这里的“配置文件备份”区别于cp file.conf{,.backup}形式的备份。只要是为了解决灾后恢复、配置回滚等问题。
备份是按照配置文件在文件系统中的目录结构进行存储配置的。
解决方案(单机备份)
#1 创建脚本
备份脚本/usr/local/bin/rsync-conf-backup.sh内容如下:

#!/bin/bash

################################################################################
# 服务器配置文件备份
################################################################################
WORKTREE=’/srv/backups/sysconf’

########################################
# 执行检查
########################################
echo -n “# check…”
# 创建配置文件保存目录
if [ ! -d “$WORKTREE” ]
then
echo “# $WORKTREE not exist”
echo “# creating ${WORKTREE}…”
mkdir -pv $WORKTREE
fi

cd $WORKTREE

if [ ! -f “$WORKTREE/.rsyncd.filter” ]
then
echo “# .rsyncd.filter not exist!”
echo “# creating .rsyncd.filter…”
cat <<EOF > .rsyncd.filter
################################################################################
# 系统配置文件备份
#########[……]

READ MORE

「Backup」- 当软件版本升级时,进行服务备份的方法

问题描述
在软件版本升级时,比如升级 Jenkins、GitLab 等等服务时,我们需要提前进行服务备份,以当升级失败时而进行回滚操作。否则当版本升级失败时,现有的数据也将被破坏,而导致服务无法再使用。
该笔记将记录:在 Linux 中,进行服务数据备份的相关方法(通用、概述),以及常见问题的解决办法。
解决方案
停服、快照
某些服务在升级时是允许停机的,即我们并不需要该服务保持 7×24 可用性。比如当升级 Jenkins 服务时,我们可以对 Jenkins 服务停机,当二进制文件升级结束时,可再启动服务。
对于该类型的服务,我们可用通过「停服、快照」的方式进行备份:停止服务,并利用文件系统的快照功能来创建快照,如果升级失败,则利用快照进行恢复;[……]

READ MORE

「rsync」- remote sync

问题描述
该笔记将记录:与 rsync 有关的内容,以及相关问题的解决方法。
注意事项
将RSYNC放入该分类中,主要动机是为了给RSYNC找一个分类。
与其他协议不同,虽然RSYNC也有自己的协议,但是它没有被IETF标准化,因此也没有RFC文档。
参考文献
Where is Rsync protocol documented?[……]

READ MORE

「rsync」- 安装(Windows,Linux)

问题描述
该笔记将记录:安装rsync 的方法,包括从源码安装、安装二进制包等等。
GNU/Linux
通过仓库安装

apt-get install rsync

通过源码安装

# 下载rsync源码并进入源码目录。
wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz
tar -xf rsync-3.1.2.tar.gz
cd rsync-3.1.2

# 准备、编译
./configure –prefix=/usr –without-included-zlib &&
make
make install

macOS
能够使用 brew 直接进行安装,执行如下命令:

brew install rsync

或者也可以像GNU/Linux中一样,从源码中编译安装,没有太大的差别:

#!/bin/bash

# 下载rsync源码并进入源码目录。
wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz
tar -xf rsync-3.1.2.tar.gz
cd rsync-3.1.2

# 准备、编译
./configure –prefix=/usr/local –without-included-zlib &&
make
make install

注意:与GNU/Linux下编译相比,唯一的差别可能在于安装到了/usr/local中。macOS中,由于有System Integrity Protection的保护,所以你不能随随便便的向/usr下写东西。如果你想安装到/usr下,需要重启macOS,开机时按住command+R,然后进入恢复模式,在终端中执行csrutil disable命令来禁用System Integrity Protection。在这种情况下安装结束后,重新进入恢复模式,在终端中执行csrutil enable命令来启用System Integrity Protection。
Microsoft Windows
WSL – Windows Subsystem for Linux
# 09/10/2021 这是我们正在使用的方案。
cwRsync
与于 Microsoft Windows 能够使用 cwRsync 软件(参考 cwRsync 项目)。
cwRsync 是对 Rsync 的打包,专门用于 Windows 的 Rsync(cwRsync,看名字也能猜出来与 Cygwin 有关)。[……]

READ MORE

「rsync」- 服务搭建(在GNU/Linux中)

处理rsync客户端请求的服务端有三种:Inetd、远程Shell、Rsync守护进程。这里先首先介绍Rsync守护进程这种方式。
准备工作
rsync命令由一个–daemon选项,可以使rsync以守护进程的方式运行,并监听默认的873端口,以等待客户端的连接。
要创建一个Rsync服务需要两样东西。一个是rsync命令,这个我们已经有了。另外一个东西是Rsync服务的配置文件rsyncd.conf。
接下来就开始介绍如何编写一个rsyncd.conf配置文件。
创建配置文件
rsyncd.conf是rsync在守护进程模式下的运行时配置文件。该文件控制了认证、访问、日志、可用模块等等。
配置文件结构及组成
下面是一个基本的rsync.simple.conf文件:

[ftp]
path = /home/ftp
comment = ftp export area

再下面是一个稍微复杂一点的rsync.sophisticated.conf文件:

uid = nobody
gid = nobody
use chroot = yes
max connections = 4
syslog facility = local5
pid file = /var/run/rsyncd.pid

[ftp]
path = /var/ftp/./pub
comment = whole ftp area (approx 6.1 GB)

[cvs]
path = /data/cvs
comment = CVS repository (requires authentication)
auth users = tridge, susan
secrets file = /etc/rsyncd.secrets

稍微复杂一点的rsyncd.conf配置文件中/etc/rsyncd.secrets文件的内容如下:

tridge:mypass
susan:herpass

配置文件由模块和参数组成:

模块:如上面的[ftp]、[cvs]。一个模块以由方括号包含着模块名称开始,并一直持续到下一个模块开始时结束。
参数:“name=value”形式的内容就是参数。比如:path = /data/cvs,use chroot = yes。

有关配置的几点注意事项

配置文件是基于行的。也就是说,以换行符终止的行可能代表着注释、模块名称、参数之一。
只有参数中第一个等号是有意义的,因为第一个等号将参数和值分开。第一个等号之前或之后的空白字符被丢弃。模块及参[……]

READ MORE

「rysnc」- 常见问题处理

内容简介
本部分简介与rsync相关的概念,以及常用命令。
# 使用SSH同步
-「How to copy files with rsync over SSH」 拉取:rsync root@hostname:/foo /bar 推送:rsync /bar root@loacalhost:/foo[……]

READ MORE

「rsync」- 与文件所有者、所属组、权限有关的处理

问题描述
在使用rsync进行文件同步时,「保留原文件的所有属性」是常规用法。有时候,我们也需要: 1)在覆盖时,保留远程原文件的所有者 ⇒ 仅覆盖文件内容,但不覆盖文件属性; 2)或者「以特定用户创建远程文件」。
本文将介绍在使用rsync进行文件同步时的处理文件所有者、所属组、权限有关的方法。
保留文件的全部属性
场景描述
即保留文件所有属性,使远程与本地文件保持一致。
这是一种常见需求,比如在进行某个服务的数据迁移,如果没有正确保留权限,那服务启动时可能会产生错误。
解决办法
使用rsync -az命令。
将目标文件设置为特定用户
场景描述
被同步到远程的文件,文件的所有者、所属组将设置为特定用户。
这是另外一种场景,本地文件由root用户所有。在同步到远程后,希望归www用户所有。
解决办法
方法一,使用特定用户上传,rsync /source/directory user@hostname:/destination/directory,远程的文件所有者及组将被设置为特定用户,这是用user及其组。
方法二,使用–chown选项,rsync –owner –group –chown=user:group src dst,选项–chown并不是修改文件所有者及所属组,而是重新映射。所以一定要指定–owner与–group选项来保留所有者及所属组,然后告诉rsync(通过–chown选项)对其重新映射。
参考文献
Rsync with destination owner and permission possible? Rsync command issues, owner and group permissions doesn´t change[……]

READ MORE

「使用inotify与rsync来实现实时同步」

参考文献
linux下两台服务器文件实时同步方案设计和实现: http://blog.csdn.net/5iasp/article/details/13630927 真正的inotify+rsync实时同步 彻底告别同步慢: http://www.ttlsa.com/web/let-infotify-rsync-fast/ rsync 远程同步文件的两种方式: http://blog.csdn.net/dabao1989/article/details/43731845[……]

READ MORE

「Linux」- 磁盘分区

问题描述
与 Linux 磁盘分区有关内容(多偏重 Linux 环境),以及相关问题解决办法;
该笔记将记录:与磁盘管理及使用有关内容(但并非所有内容),通常与单个磁盘相关;
解决方案
所属分类
“文件系统”是“操作系统”的组成部分之一,但是存储磁盘不是操作系统的组成部分。存储磁盘是计算机的组成部分,因此磁盘管理、配置是操作系统无关的,它是硬件自身的属性。但是,鉴于磁盘管理是操作系统维护的任务之一,所以我们依旧将磁盘、磁盘管理归属到操作系统分类下,;
章节内容
”磁盘分区“必然属于该部分。这是磁盘日常管理的基础内容;
”坏块检测“属于该部分。坏块检测是针对磁盘设备本身的,这确实是磁盘相关问题;
”性能检测“数据该部分。磁盘读写性能是磁盘属性之一,它属于该部分。虽然分布式文件系统、分布式存储也涉及”性能检测“,但是这两者所涵盖内容不同。这里的”性能检测“更基础,更底层;
本部分也包含 Windows 相关的磁盘管理,但是我们 Windows Server 用的比较少,所以内容更偏向于桌面;
不包含内容
”进程当前 I/O 活动“不属于该部分。因为他与磁盘本身没有太大关系,该问题及相关问题不属于磁盘,它仅使用该资源;
”LVM/NFS/RAID“不属于该部分。它们属于存储技术,会在独立的部分进行讨论,它们所涉及的内容已经超过单个磁盘;
磁盘分区带来的优势
The importance of Linux partitions 10 reasons for using multiple partitions
更灵活的安全控制
1)可以针对特定分区(文件系统)进行数据加密,而无需加密整个磁盘; 2)通过针对分区设置挂载选项,比如 nosuid,noexec 等等,提高安全性;
针对用途进行优化
1)可以针对目的(用途),采用不同文件系统,使用不同的调优参数; 2)针对小文件,可以对该分区文件系统使用更小的块,以提高利用率; 3)较小的文件系统效率更高(未验证过);
易于使用、维护简单
1)当文件系统损坏时,通常只会损坏某个分区内的文件系统,易于修复; 2)当重新安装操作系统时,不会影响到其他分区内的数据,无需迁移数据;
更灵活的控制与使用
1)可以限制文件系统对磁盘空间的占用,使其不会超过分区的大小; 2)可以安装多个操作系统进行测试;
数据备份与数据恢复
1)可以针对特定分区进行数据备份与恢复,更加灵活;
我们的选择分区方案
KVM Guest
某台主机用于虚拟化,我们将整个磁盘分为 / 与 /var 两部分。理由如下: 1)在主机中,包含操作系统(/)与虚拟机的磁盘文件(/var/lib/li[……]

READ MORE

「Linux」- 在虚拟机中,检测新增磁盘(无需重启)

问题描述
当我们向 Linux 虚拟机添加虚拟磁盘后,Linux 虚拟机是无法检测到该磁盘的,需要重启系统后才能检测到新添加的磁盘;
那如何在不重启的情况下检测到该磁盘呢?
该需求通常发生在虚拟机中,而物理机一般不会有这种需求;
解决办法

for host in /sys/class/scsi_host/*
do
echo “####### $host”
echo “- – -” > $host/scan
# ls /dev/sd*
done

参考文献
How to detect new hard disk attached without rebooting? VMware: Add disk to linux without rebooting the VM[……]

READ MORE

「Linux」- 磁盘分区工具

问题描述
在Linux中有众多用于磁盘分区的工具,比如fdisk、gdisk、parted等等。它们对分区表的支持程度也不尽相同,有些支持MBR分区表,有些支持GPT分区表。因此,在创建不同类型的分区表时,需要使用不同的工具。
本文将简单梳理这些分区工具,了解其适用场景,以明确何种场景下使用何种工具。
注意事项
本文仅列举常用分区工具(即在发行版中常见的磁盘分区管理工具)。因为我们认为发行版中自带的工具具有通用性、普适性,因此我们更倾向于学习发行版中默认自带的工具。“用户友好且高级的工具”不在本文介绍的范畴。
如果分区工具的版本不同,那么功能也会存在差异。在本文中,我们将标注出所介绍工具的版本,请参考对应手册获取准确信息。
常见磁盘分区工具有哪些?
fdisk, gdisk, sfdisk, parted, cfdisk, gparted, …
下面对这些工具进行简单的分类,分类依据为工具能否在脚本中使用。
可脚本化的分区工具
该分类下的工具可以在脚本中使用,进行编程。
fdisk
命令版本:fdisk from util-linux 2.34 分区类型:GPT, MBR, Sun, SGI, BSD
旧版(比如fdisk from util-linux 2.23.2版本)可以处理GPT分区表,但是处于实验阶段,因此不建议使用。
gdisk
-「gdisk」 用于处理GPT分区表,与fdisk算是兄弟了。
parted
同时支持MBR和GPT分区表,还支持其他多种分区表格式。常用于为新操作系统创建空间、重新组织磁盘使用、将数据复制到新硬盘。 它不是那种类似于fdisk的程序,使用该命令添加和删除分区并不会更改磁盘,它只是告诉内核有关磁盘分区的存在和编号。
sfdisk
从2.26版本起,sfdisk支持MBR (DOS), GPT, SUN和SGI磁盘标签,详细参考sfdisk(8)手册。
关于脚本编程
其中 disk, sfdisk, gdisk 可以用类似于如下的形式,进行脚本编程:

#!/bin/sh

fdisk /dev/sdc <<EOF
g
n
1

+64MiB
n
2

t
1
83
t
2
83
w
EOF

但是 parted 会更好一些,因为 parted 有自己的命令:

#!/bin/sh

parted –script /dev/sdc \
mklabel gpt \
mkpart primary ext4 1MiB 65MiB \
mkpart primary ext4 65MiB 134MB

非脚本化[……]

READ MORE

「硬盘」- 如何检测坏块

问题描述
该笔记将记录:检测 SSD 坏块的方法,包括使用第三方工具及系统工具;
使用命令行(使用 Linux 命令)
方法一、使用 badblock 命令
参考 使用 badblock 命令检查磁盘坏块 笔记;
方法二、使用 Smartmontools 工具(推荐)
对于现代硬盘(ATA/SATA、SCSI/SAS、SSD),通常带有 S.M.A.R.T 模块。它用于检测、记录、报告磁盘的健康状况。因此可以使用它检测硬件故障;
在安装 smartmontools 之后,就可以通过 smartctl 命令操作集成到磁盘中的 S.M.A.R.T 模块。实际上 smartmontools 分为两部分,客户端与服务端。客户端是 smartctl 命令,而服务端是 smartd 程序。在发行版中,安装 smartmontools 后,服务会被自动启动。所以实际过程是「smartctl => smartd => S.M.A.R.T」;

#!/bin/sh

################################################################################
# 安装工具(Debian)
################################################################################
apt-get install smartmontools
systemctl status smartd.service # 验证 samard.service 已经启动

################################################################################
# 简单使用示例
################################################################################
#1 显示 S.M.A.R.T 的整体健康自我评估结果
smartctl -H /dev/sda1 # 如果结果显示 PASS 值,则表示通过。但这不代表没有问题;

#2 使用–all 则显示相关磁盘信息;使用–xall 则显示磁盘所有信息(包括 SMART 与非 SMART 信息);
# 留意输出结果中的 Current_Pending_Sector 值,该值显示有多少磁盘扇区无法读取并在等待重新映射;
smartctl -a /dev/sdb

#3 测试硬盘
smartctl -t short /dev/sdb # 执行测试,即发送命令给 smartd 程序
smartctl -l[……]

READ MORE

「Linux」- 使用badblock命令检查磁盘坏块

badblock
实用程序 badblock 用于检测磁盘中的坏块。它支持以下几种扫描模式:

只读模式 – 默认模式,但是精准度是最低的;
写入模式 – 有害模式,这是最精准的模式,但是检测时间较久,并且会破坏所有数据;
读写模式 – 无害模式,精准度与写入模式差不多,但是最慢。

如果已知硬盘存在坏块,那只读模式应该是最安全的。
扫描磁盘
使用如下命令可以对磁盘进行扫描:

#!/bin/sh

################################################################################
#1 使用fdisk命令确定要检查的磁盘
################################################################################
fdisk -l # 或者lsblk命令

################################################################################
#2 然后扫描磁盘(这里是/dev/sdc分区)
################################################################################
badblocks -v /dev/sdc > badsectors.txt

#「-v」- 显示操作的细节
#「> badsectors.txt」- 将扫描结果保存到文件中。命令e2fsck、fsck等等可以使用该文件。

################################################################################
#3 扫描特定分区
################################################################################
badblocks -v /dev/sdc1 > badsectors.txt

全盘扫描
但是全盘扫描由一个缺点:每个文件系统”相对于它所在的分区“开始进行块计算。
假如你的第二个分区存在坏块,并且该分区从块1000开始。在进行全盘扫描得到坏块值,减去1000后,得到的值才是你想要的坏块值,后面的计算也要基于该值。
或者,在全盘扫描之后,再单独对坏块所在的分区进行扫描。这样就不需要进行数学计算。
块大小
另外需要注意的是块大小:命令badblock使用1024 BYTE块,因此你需要使用-b[……]

READ MORE

「Linux」- 磁盘克隆

内容简介
本部分整理与磁盘复制有关的内容。
相关链接
How to clone disks with Linux dd command[……]

READ MORE

「STORAGE」- 查看物理磁盘位置

ledmon

apt-get install ledmon

# To start:
ledctl locate=/dev/sdd

# To stop:
ledctl off={/dev/sdd}

smartctl

while :; do smartctl -a /dev/sdaX; done; # simple looop for blinking a disk

参考文献
centos – How to make a RAID disk light blink (on Linux)? – Server Fault[……]

READ MORE

「Linux」- 查看和修改分区表类型

查看分区表类型
在如下命令输出信息中,将显示分区表类型:

parted “/dev/sdX” print

修改分区表类型
如下命令将使分区使用 MBR 分区:

parted “/dev/sdX” mklabel “msdos”

参考文学
How can I check and change the partition table type?[……]

READ MORE

「Linux」- 文件系统管理,File System Management

磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!磁盘操作有风险,先备份数据,谨防数据丢失!!!
TODO rm on a directory with millions of files rm on a directory with millions of files

-> https://serverfault.com/questions/183821/rm-on-a-directory-with-millions-of-files/328305#328305
How can I delete a folder with lots of subfolders fast?

TODO initramfs 「LFS/About initramfs」 「Wikipedia/Initial ramdisk」
在Linux中支持的文件系统
内核:Linux 4.9.0-amd64
# cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cpuset
nodev cgroup
nodev cgroup2
nodev tmpfs
nodev devtmpfs
nodev debugfs
nodev tracefs
nodev securityfs
nodev sockfs
nodev dax
nodev bpf
nodev pipefs
nodev hugetlbfs
nodev devpts
nodev pstore
nodev mqueue
btrfs
ext3
ext2
ext4
nodev autofs
nodev binfmt_misc
fuseblk
nodev fuse
nodev fusectl
squashfs
nodev rpc_pi[……]

READ MORE

「File system」- 杂记

碎片整理
How to Repair and Defragment Linux System Partitions and Directories
Overlay filesystem
ArchWiki/Overlay filesystem

章节列表
「find」- Permission denied 「Journaling block device」 「Linux」- 分区标签(LABEL) 「Linux」- 监控文件删除、找到删除文件的进程 「Linux」- 如何高效地移动/复制文件 「系统维护」- 关于扩展文件系统 「关于使用mv命令合并目录」[……]

READ MORE

「系统维护」- 关于扩展文件系统

内容简介
在部署服务时,我们一定会预估需要的磁盘空间,然后为系统添加额外的分区,以容纳更多数据。
本文将讨论这个过程中某些做法的优劣,以及应该怎么做。
关于数据目录
# 修改默认目录
这是一种很常见的做法:

新建一个目录,然后将新的分区挂载到这个目录,再修改应用的配置,将指定的配置指向该目录,然后启动服务。

问题就在于我们为什么要这么做,为什么要修改默认目录,为什么不直接挂载到默认的目录上?
# 如果有更好的做法
我更倾向于“挂载到原有目录”的做法。理由有以下几点:

(1)不需要修改配置。做到最少变动,以减少配置错误或配置遗漏的可能性。

(2)遵循发行版的默认规则,更具有通用性。如果使用自定义规则,除了要维护相关文档外,还要监督所有的管理员遵循这些规则。

(3)可以使用发行版内置的功能。比如日志轮转,如果调整了日志文件的写入路径,与此同时还应该修改日志轮转脚本。

(4)另外,依照发行版的配置,可以为升级管理带来方便,减少维护成本。

所以在系统管理中,个人更倾向于遵循发行版中默认规则,进行最小变动。有时候,有些变动是完全没有必要的。
目前的做法是:为主机分配一块较大的存储设备(比如SAN存储),然后创建多个LVM逻辑卷,供不同目录挂载使用。通常主机是专用的,只运行几个特定服务,因此需要大容量的目录也就很少。
# 关于LVM命名
命名一直是一个让人头疼的问题。不过也还好,既然遵循发行版的规则,命名也简单了很多,也有迹可循了。
对于/var/lib/mysql可以创建名为/dev/mysql/lib的分区;而/var/log/mysql可以创建名为/dev/mysql/log的分区。[……]

READ MORE

「Journaling block device」

问题描述
遇到一个状况:

通过iotop命令,内核jbd(jbd2/dm-0-8)线程占用的IO特别高。

没解决,先记录下来把。
相关链接
Index» Kernel & Hardware» High IO wait caused by jbd2 Linux Wait IO Problem what is jbd2/vda1-8 ? using high io High server load – [jbd2/md1-8] using 99.99% IO
参考文献
Wikipedia/Journaling block device[……]

READ MORE