「Linux」- 分区标签(LABEL)

问题描述
在 Windows 中,我们为分区命名,那个名字就是「分区标签」。所以说“分区标签”是给分区的一个名字,让分区更容易被我们记忆。
在 Linux 中,我们也可以为分区设置标签。
该笔记将记录:在 Linux 中,如何查看和设置分区标签。
解决方案
查看分区标签

# ==== 方法一,使用/dev/disk/by-label查看 ====
ls -l /dev/disk/by-label

# ==== 方法二,使用「lsblk」命令 ====
lsblk -o name,mountpoint,label,size,uuid

# ==== 方法三,使用「blkid」命令 ====
blkid

# ==== 其他,显示某个磁盘的「LABEL」值 ====
e2label /dev/sdx

设置分区标签
对于 ext 文件系统:

# 使用 e2label 命令
e2label /dev/sdb2 usbstroage

# 使用 tune2fs 命令
tune2fs -L usbstroage /dev/sdb2

对于 exFAT 文件系统:

exfatlabel /dev/sdb2 usbstroage

对于 NTFS 文件系统:

ntfslabel /dev/sdb2 usbstroage

附加说明
关于 UUID 与 LABEL 的存储位置
LABEL 是文件系统的概念。当我们尝试在一个NTFS分区上使用e2label命令时,得到了e2label: Bad magic number in super-block while trying to open /dev/mmcblk0错误。而且包括 UUID 也是文件系统的概念。所以使用 dd 命令复制分区,此得到 UUID 及 LABEL 相同的两个分区。
参考文章: Are disk partition labels or UUIDS stored in the partition area itself or in some other area of the hard disk? Where does Ubuntu store partition UUIDs on disk? http://www.nongnu.org/ext2-doc/ext2.html#S-UUID http://linux.die.net/man/3/libuuid
Disk Label vs Partation Label
关于 磁盘标签 与 分区标签 区别: 1)磁盘标签(Disk Label),其实是我们经常说的分区表,比如 MBR、GPT[……]

READ MORE

「Linux」- 监控文件删除、找到删除文件的进程

问题描述
该笔记将记录:在 Linux 中,如何监控文件系统文件删除,找出删除文件的进程,以及常见问题处理。
解决方案
解决该问题的方案有很多,比如: 1)auditd 2)sysdig 3)inotifywait(仅能获取变化文件,无法获取相关进程)
方案一、通过 auditd 服务
第一步、安装 auditd 服务:

# apt-get install -y auditd

# systemctl enable auditd.service

# systemctl start auditd.service

第二步、添加服务配置,以监控文件删除:

# vi /etc/audit/rules.d/audit.rules
-a always,exit -F dir=/tmp -S unlink -S unlinkat -S rename -S renameat -S rmdir -k delete_var

# systemctl restart auditd.service

# auditctl -l
-a always,exit -S rename,rmdir,unlink,unlinkat,renameat -F dir=/var/tmp -F key=delete_var

第三步、查看日志,以获取文件删除的原因:

# ausearch -k delete_var

参考文件
How to use auditd to monitor a file deletion in Linux – The Geek Diary linux – Auditd – auditctl rule to monitor dir only (not all sub dir and files etc..) – Stack Overflow rm – How to find the pid of the process which has deleted a file? – Ask Ubuntu[……]

READ MORE

「Linux」- 如何高效地移动/复制文件

问题描述
在日常工作中,离不开数据的复制与移动。有时需要将几百万(甚至几千万)的静态资源移动/复制到其他存储设备中。那该如何高效的移动/复制这些数据呢?
本文将介绍如何高效移动大量文件的方法。
关于并行地移动/复制
在「Is it better to pass all files to mv or to run a bunch of mv processes in parallel?」中,有人回答了这个问题。其中有一句话是点睛之笔:

如果并行移动文件真的有意义,那么mv(1)或者其他类似工具早有这么做了。

所以说,不要再想着并行移动/复制文件。而且,并行移动/复制还会带来其他问题:

(1)并行写入可能会带来文件碎片;
(2)如果目标空间不足,并行会导致多个文件不完整;

所以不要再想象什么并行移动/复制操作。
移动文件
# 同一文件系统
如果移动的源地址及目的地址位于同一文件系统中,可以直接使用mv(1)命令,速度将会非常快,因为它只更新inode信息。
# 不同文件系统
既然没有什么并行动作,所以直接使用mv(1)命令即可。
复制文件
对于文件的复制,不管是否位于同一文件系统,都可以使用rsync(1)命令。因为它可以提供更细粒度的控制,比如权限保留、增量复制等等。如果发生终端,由于支持增量复制,因此也可以恢复。
参考文献
Is it better to pass all files to mv or to run a bunch of mv processes in parallel? What is the fastest way to move a million images from one directory to another in Linux?[……]

READ MORE

「find」- Permission denied

find: /sys/firmware: Permission denied
find: ‘./proc/1/map_files’: Permission denied
「https://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html」
参考文献
find: ‘./proc/1/map_files’: Permission denied[……]

READ MORE

「关于使用mv命令合并目录」

经常会有这种情景:我们需要合并两个目录。
实际情况:mv命令不支持目录合并
看一个示例。当前目录下有两个目录a0与b0,同时b0中还有一个a0,但是这个两个a0目录的内容不同,我想合并这两个a0目录。目录结构如下:

# tree a0 b0
a0
└── a1

├── a1.txt
└── a2

b0
├── a0
│   └── a1
│   └── a2
│   └── a2.txt
└── b1

└── b2

7 directories, 2 files

在我尝试将a0合并到b0/a0中时,mv命令返回了一个错误:

# mv a0 b0/
mv: cannot move ‘a0’ to ‘b0/a0’: Directory not empty

之所以返回这个错误是因为mv命令不支持目录合并。
实现目录合并的方法
不跨文件系统的解决方案
You can use the -l option of the cp command, which creates hard links of files on the same filesystem instead of full-data copies. The following command copies the folder source/folder to a parent folder (destination) which already contains a directory with the name folder.

cp -rl source/folder destination
rm -r source/folder

Notes:

You may also want to use the -P (–no-dereference – do not de-reference symbolic links) or -a (–archive – preserve all metadata, also includes -P option), depending on your needs.
Though there are two “I/O” steps involved, the steps are relatively simple metadata operations involving zero “[……]

READ MORE

「Linux」- 文件系统的挂载

# Mount Google Drive Locally How To Mount Google Drive Locally As Virtual File System In Linux
非特权用户执行 mount 命令
linux – How to allow non-superusers to mount any filesystem? – Unix & Linux Stack Exchange
mount 命令无法由非特权用户直接执行,有两种方法: 1)使用 SUDO 命令(这等同于使用 ROOT 用户) 2)由 ROOT 定义 fstab 条目。
方法一、使用 SUDO 命令
执行 sudo mount 命令即可,这里不再深入展开。
方法二、由 ROOT 定义 fstab 条目
第一步,ROOT 用户修改 /etc/fstab 文件,添加如下配置:

192.168.30.26:/root/backup /usr/backup nfs rw,noauto,user 0 0

// 这里以 NFS 文件系统为例
// noauto:防止开机自动挂载
// user:允许普通用户执行

第二步、普通用户执行挂载命令:

mount /usr/backup

参考文献
Wikipedia/mount (Unix)

章节列表
「Linux」- fstab 「Linux」- 挂载 CIFS 文件系统 「Windows」- 访问 Samba 共享[……]

READ MORE

「Linux」- 挂载 CIFS 文件系统

问题描述
该笔记将记录:在 Linux 中,如何挂载 Windows 共享(Samba、CIFS),以及相关问题处理。
解决方案
查看共享内容:

# smbclient -L 127.0.0.1
Enter WORKGROUP\k4nz’s password:

Sharename Type Comment
——— —- ——-
print$ Disk Printer Drivers
IPC$ IPC IPC Service (desktop-ubuntu20 server (Samba, Ubuntu))
ORG000-D3RM Disk
SMB1 disabled — no workgroup available

方法一、mount.cifs(8)
如果使用 mount(8) 挂载 CIFS 文件系统,需要安装 LinuxCIFS utils 工具集。
第一步、安装软件包:

# Debain
apt-get install -y cifs-utils

# Redhat/CentOS
yum install -y cifs-utils.x86_64

第二步、挂载文件系统:

# 将 //192.168.3.4/ sharedir 挂载到 /mnt/cifs 目录上,并指定了用户名和密码。
# 如果不需要认证,则无需指定用户名和密码。
mount -t cifs -o username=demo,password=demo ‘//192.168.3.4/sharedir’ ‘/mnt/cifs’

第三步、开机自动挂载(修改 /etc/fstab 文件):

# 将//192.168.3.4/sharedir挂载到/mnt/cifs上,并指定了用户名和密码
//192.168.3.4/sharedir /mnt/cifs cifs username=demo,password=demo 0 0

# 如果不需要认证,可以不指定用户名和密码。

方法二、smbmount(废弃)
命令 smbmount 已被弃用,推荐使用 mount.cifs 命令。
# 12/23/2019 现在,在 Debian GNU/Linux 10 (buster) 中,已经找不到该命令。
常见错误汇总
mount.cifs: bad UNC
问题描述:在执行 mount 过程中,返回如下错误:

mount.cifs: bad UNC[……]

READ MORE

「Windows」- 访问 Samba 共享

解决方案

// 映射网络驱动(持久化挂载)

net use Z: \\computer_name\share_name /PERSISTENT:YES

// 卸载共享

net use Z: /delete

常见问题处理
You can’t access this shared folder because your organization’s security policies block unauthenticated guest access.
You can’t access this shared folder because your organization’s security policies block unauthenticated guest access FIX: You Can’t Access This Shared Folder Because Your Organization’s Security Policies Block Unauthenticated Guest Access
问题描述:
解决方案: Open the Local Group Policy Editor (gpedit.msc). In the console tree, select Computer Configuration > Administrative Templates > Network > Lanman Workstation. For the setting, right-click Enable insecure guest logons and select Edit. Select Enabled and select OK.
参考 Guest access in SMB2 and SMB3 disabled by default in Windows 文档,以获得详细说明。
参考文献
How to Mount CIFS Shares from Windows Command Line – FileCloud – FileCloud Support[……]

READ MORE

「Linux」- fstab

# _netdev -「How does _netdev mount option in /etc/fstab work?」
# runit-fstab-generator https://www.vivaolinux.com.br/script/runit-fstab-generator
使用绑定挂载
unix – How do I do ‘mount –bind’ in /etc/fstab? – Server Fault

/source /destination none defaults,bind 0 0

/source 是最终被写入数据的目录;在挂载 Ext4 文件系统时,其对应块设备地址; /destination 是呈现出来的目录;在挂载 Ext4 文件系统时,其对应系统的目录;
生成 /etc/fstab 配置行
每次修改 fstab 文件,虽然不难,但是繁琐。那能不能自动生成呢?答案是肯定的,能,必须能!本文将介绍一些自动生成 fstab 文件的工具;
genfstab(推荐) GitHub/Brainiarc7/fstab-generate-arch arch/arch-install-scripts.git
The fstab line generator https://epistel.no/fstab/[……]

READ MORE

「AutoFS」

介绍
工具autofs是一个根据需要自动挂载目录的程序。 自动挂载仅在访问时挂载,并在一段时间不活动后卸载。 因此,与通过fstab进行静态挂载相比,自动挂载NFS/Samba共享可以节省带宽并提供更好的整体性能。
为避免混淆,将使用以下术语: 1)automount,指用于为autofs配置挂载点的程序。启动autofs时,会为每个映射生成一个automount守护程序。 2)自动挂载,指自动挂载文件系统的过程。 3)autofs,指控制 automount 守护进程操作的程序。
安装
配置
注意事项
请记住,在自动挂载之前,您需要访问目录。否则,不会看不到任何列出的内容。访问完成后,您的共享将一直列出,直到超时为止。记住这一点很好,因为它可以节省您诊断autofs问题的时间。
自动挂载 SSHFS 文件系统
Auto mount (autofs) sshfs access Autofs and sshfs – the perfect couple How to convert sshfs command to fstab entry? How do I remove the passphrase for the SSH key without having to create a new key?
参考文献
https://mirrors.edge.kernel.org/pub/linux/daemons/autofs/v5/ Autofs[……]

READ MORE

「Linux」- 挂载 FTP 到本地目录,CurlFtpFS

CurlFtpFS,基于 FUSE 与 cURL,将 FTP Server 挂载到本地目录。在 Google上 搜索了几篇文章,排名靠前的都是 CurlFtpFS 工具。
安装应用
通过仓库直接安装

# Ubuntu 16.04 TLS
apt-get install curlftpfs

通过源码编译安装
去官网下载CurlFtpFS源码,安装过程参考 INSTALL 中件。
安装的可执行程序
curlftpfs,主程序文件,将ftp主机挂在到本地目录中。
curlftpfs
curlftpfs,主程序文件,将ftp主机挂在到本地目录中。
命令行语法格式
curlftpfs [options] host path
命令描述
该程序可以将远程的FTP目录挂在到本地的文件夹中,然后将远程FTP的目录映射到本地。
curlftpfs所有于传输相关的特征都依赖于libcurl(man 3 libcurl)库。 在FUSE之上实现的文件系统。可以去FUSE主页查看相关内容(原主页实在SourceForge上,后来挪到Github了)。
FTP 有关的选项(FTP OPTIONS)

-v/–verbose

Make libcurl print verbose debug output.

-o 以下的选项需要使用-o选项来指定,多个参数之间使用逗号(,)分割:

cacert=<file>

(SSL) Pass a string naming a file holding one or more certificates to verify the peer with.

Note that option is by default set to the system path where libcurl’s cacert bundle is assumed to be stored, as
established at build time.

capath=<directory>

(SSL) Tells curlftpfs to use the specified certificate directory to verify the peer. The certificates must be in PEM
format, and the directory must have been processed using the c_[……]

READ MORE

「Eudev」

Eudev,软件包包含用于动态创建设备节点的程序。
安装的可执行程序
udevadm Generic udev administration tool: controls the udevd daemon, provides info from the Udev database, monitors uevents, waits for uevents to finish, tests Udev configuration, and triggers uevents for a given device
udevd A daemon that listens for uevents on the netlink socket, creates devices and runs the configured external programs in response to these uevents
参考文献
LFS / Eudev-3.2[……]

READ MORE

「udevadm」

UDEVADM(8) udevadm UDEVADM(8)
NAME

udevadm – udev management tool

SYNOPSIS

udevadm [–debug] [–version] [–help]

udevadm info options

udevadm trigger [options]

udevadm settle [options]

udevadm control command

udevadm monitor [options]

udevadm test [options] devpath

udevadm test-builtin [options] command devpath

DESCRIPTION

udevadm expects a command and command specific options. It controls the runtime behavior of
systemd-udevd, requests kernel events, manages the event queue, and provides simple debugging
mechanisms.

OPTIONS

–debug

Print debug messages to standard error.

–version

Print version number.

-h, –help

Print help text.

udevadm info [options] [devpath|file]

Queries the udev database for device information stored in the udev database. It can also query the
properties of a device from its sysfs representation to help creating udev rules that match this
device.

-q, –query=TYPE

Query the dat[……]

READ MORE

「Ext4」- fourth extended filesystem

参考文献
Wikipedia/ext4 Ext4 (and Ext2/Ext3) Wiki

章节列表
「Linux」- 分区扩展,增大分区,磁盘扩展,调整硬盘分区 「Linux」- 缩小 Ext4 分区(调整文件系统大小、缩小文件系统、扩大文件系统) 「Ext4」- 找到受坏块影响的文件 「fsck.ext4」[……]

READ MORE

「Ext4」- 找到受坏块影响的文件

问题描述
如果在物理磁盘中出现了坏块,那么使用该坏块的文件将无法正常读取(比如在复制时会显示I/O错误)。那么我们该如何定位受坏块影响的文件呢?
本文将通过一系列方法在文件系统中找到受坏块影响的文件。
注意事项
进行坏块检测是文件系统无关的,而文件定位是文件系统相关的。所以,不同文件系统要使用不同处理工具。例如,在ext2/ext3/ext4中使用debugfs命令,而其他的文件系统要使用其他工具。
针对磁盘操作具有一定的危险性,注意数据备份!!!
本文内容是对「archlinux/Identify damaged files」的学习与整理,并未进行实际操作与验证。我们的目的是了解”查找受坏块影响的文件的“方法。
环境概述
本文是针对Ext4文件系统。
确定文件系统的块大小
使用tune2fs命令确定文件系统块大小:

#!/bin/sh

tune2fs -l /dev/sdxy | grep -i Block

找到文件系统的坏块值
你可能已经使用badblock命令找到坏块值,但是该值不一定是文件系统坏块值。这是由于badblock命令所使用的块大小,与文件系统的块大小不同(或者说不一定相同)。所以有以下两个选择。
使用相同块大小

#!/bin/sh

badblock -b “<file system block size>” -v /dev/sdxy

该命令扫描特定分区,并且使用文件系统块大小,所以输出的坏块位置即是文件系统中的坏块值。
使用不同块大小
如果已经使用badblock扫描磁盘,但是扫描时的块大小并不是文件系统的块大小,则需要进行转换:

(original block number) / (filesystem_block_size / badblocks_block_size)
original block number * badblocks_block_size / filesystem_block_size

上面的两个公式是等价的,都基于「相同位置 = 块位置 x 块大小 = 文件系统块大小 * 文件系统块位置」这一点。
开始文件系统调试
进入debugfs交互模式
执行debugfs命令,进入debugfs的交互模式:

# debugfs
debugfs 1.45.4 (23-Sep-2019)
debugfs: open /dev/sdxy

ncheck inodenumber

打开分区
在debugfs的交互模式中,使用open命令打开分区:

debugfs: o[……]

READ MORE

「Linux」- 分区扩展,增大分区,磁盘扩展,调整硬盘分区

问题描述
事实证明:不分区,没有太多好处;分区不合理,也有很多坏处的;应该是使用LVM的。
理想环境:目前,我们的SWAP分区在机械硬盘上,想换到固态硬盘上。这很简单,固态硬盘切个分区,然后mkswap(8)一下,挂载一下就行了。事情本该就这么简单,但是每次落实的时候都会遇到各种问题,不是操作复杂,而是情形总是和预想的不一样,会有各种状况。
现实情况:在我们的环境里,固态硬盘一共三个分区,分别挂载了不同的文件系统,已经没有空间来创建新的分区了。而且由于分区不合理,导致目前部分分区空余了大量的空间。所以怎么办呢?那些年我们还接触LVM呢。有的时候真的是,我们今天遇到的问题,其实前人很早之前就遇到过了。
解决方案:我们的办法是:缩小原有的某个磁盘的分区,从我们的固态硬盘上切出8G的分区,然后创建SWAP分区。目前还不打算迁移到LVM中,因为迁移到LVM需要做大量的工作(备份数据、创建LVM、然后回迁数据),而且也没有找到一个直接转换到LVM而无需迁移数据的方法,但是有个工具(「blocks」)。
环境概述
操作系统:Kali Linux Rolling
磁盘分区:/dev/sdb1 /dev/sdb2 /dev/sdb3
# df -h | grep /dev/sdb /dev/sdb1 49G 26G 21G 56% /opt /dev/sdb2 30G 15G 14G 52% /root /dev/sdb3 32G 3.3G 27G 12% /usr/local
操作步骤
(1)将/dev/sdb3分区缩小到7G大小,然后从富余的20G空间中切出8G用作交换分区,剩下的留作备用。
(2)第(1)步是主要的操作,至于后续的创建交换分区就不再介绍了。本文也侧重第(1)步的讲解。
注意事项
我们会先进行测试,确保我们的操作过程是正确的。
在实际的操作过程中,我们会新进行数据备份,以防止数据丢失。
扩容步骤
#1 用于执行测试的设备
我们有一个SD卡,16G,使用情况如下:

# df -h | grep /dev/mmcblk0p1
/dev/mmcblk0p1 15G 8.5G 5.3G 62% /mnt/os

里面放了三个操作系统的镜像,MD5如下:

# find ./ -type f -print0 | xargs -0 md5sum
adfcff7187115681d63d4da5cae0a296 ./cn_windows_7_professional_with_sp1_x86_dvd_u_677162.iso
660aab9894136872770ecb6e1[……]

READ MORE

「Linux」- 缩小 Ext4 分区(调整文件系统大小、缩小文件系统、扩大文件系统)

问题描述
环境信息: 1)/dev/mapper/dt-libvirt ext4 295G 101G 179G 37% /var/lib/libvirt 2)我们需要将其缩小到 110G 磁盘空间; 3)操作系统:Ubuntu 21.04
解决方案
注意事项
磁盘调整操作有风险,请注意数据**备份**!
为了校验数据一致性,在磁盘调整之前与之后,我们都会执行如下脚本,用于检查数据一致性:

# find ./ -type f -print0 | xargs -0 -i md5sum ‘{}’

第一步、缩小文件系统

systemctl stop libvirtd.service # 移除磁盘占用,否则无法 umount
umount /var/lib/libvirt

# e2fsck -f /dev/mapper/dt-libvirt
e2fsck 1.45.7 (28-Jan-2021)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/dt-libvirt: 54/19660800 files (0.0% non-contiguous), 27925391/78643200 blocks

# resize2fs /dev/mapper/dt-libvirt 110G
resize2fs 1.45.7 (28-Jan-2021)
Resizing the filesystem on /dev/mapper/dt-libvirt to 28835840 (4k) blocks.
The filesystem on /dev/mapper/dt-libvirt is now 28835840 (4k) blocks long.

第二步、缩小分区
针对普通分区:通过 cfdisk 命令,重新创建分区表即可。
针对 LVM 环境:

# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home dt -wi-ao—- 50.00g
libvirt dt[……]

READ MORE

「fsck.ext4」

Is it possible to find out which files are deleted during a filesystem recovery check?[……]

READ MORE

「FHS」- 文件系统层次标准,Filesystem Hierarchy Standard

/ (a.k.a ROOT)
Linux提供的系统文件
/boot
存放引导系统的文件,内核存在于该目录总中。通常命名为/boot/vmlinuz或类似的目录。
/proc
当前运行的进程,供高级用户使用
ioports,计算机的输入输出硬件列表 cpuinfo,计算机处理器方面的信息 version,操作系统版本,除此之外uname命令也能输出这些信息 uptime,系统正常运行时间,可以使用uptime命令来获取更加人性化的输出。 xxx,进程ID为xxx的进程的信息。 self,正在运行的当前进程的信息。
/sys
sysfs – Wikipedia
sysfs,是由Linux Kernel提供的伪文件系统,它通过虚拟文件将关于各种内核子系统、硬件设备、相关设备驱动程序的信息从内核的设备模型导出到用户空间。除了提供有关各种设备和内核子系统的信息之外,导出的虚拟文件也用于其配置。
sysfs,提供的功能类似于BSD操作系统中的sysctl机制,不同之处在于sysfs被实现为虚拟文件系统,而不是特制的内核机制,而在Linux中,sysctl配置参数是在作为procfs一部分的/proc/sys/中,而不是挂载在/sys/的sysfs。
sysfs挂载在/sys下。如果在初始化期间未挂载,则可以使用以下命令挂载:mount -t sysfs sysfs /sys
如udev或HAL等程序,通过sysfs访问有关硬件及其驱动程序(内核模块)的信息。脚本已被写入先前通过procfs获取的访问信息,一些脚本通过其属性来配置设备驱动和设备。
https://en.wikipedia.org/wiki/Sysfs https://www.kernel.org/doc/Documentation/filesystems/sysfs.txt https://lkml.org/lkml/2002/10/19/8 https://lkml.org/lkml/2002/11/4/213 https://lkml.org/lkml/2001/10/17/147 https://lkml.org/lkml/2001/11/1/38 https://www.kernel.org/pub/linux/kernel/people/mochel/doc/papers/ols-2005/mochel.pdf https://www.kernel.org/doc/Documentation/filesystems/sysfs.txt https://wiki.debian.org/ramfs https://lwn.net/Articles/54651/ https://lwn.net/Articles/[……]

READ MORE

「GVfs」- 文件系统的抽象层

安装
从发行版的源中安装

#!/bin/bash

# Kali GNU/Linux Rolling
apt-get install gvfs gvfs-backends gvfs-bin gvfs-common gvfs-daemons gvfs-fuse gvfs-libs

参考文献
Wikipedia/GNOME Virtual file system[……]

READ MORE

「GNOME」- 禁用设备自动挂载

内容简介
在GNOME中,当插入新的存储设备时,比如USB存储,会自动进行挂载。
那如何禁用呢?因为有时我们并不需要自动挂载,在我们插上设备之后,可能需要进行一些其他维护性的工作,我们要挂载到特定的目录,进行某些特定的操作。
本文将介绍如何禁用设备的自动挂载。
环境介绍

GNOME
GNOME Shell 3.30.2

在命令行中禁用
针对当前用户的设置:

#!/bin/sh

gsettings set org.gnome.desktop.media-handling automount false
gsettings set org.gnome.desktop.media-handling automount-open false

# 在Red Hat的Knowledgebase中,他说需要重启gdm服务。
# 但是,我执行了上述命令之后立即生效,不需要重启。
systemctl restart gdm.service

针对所有用户的设置:

#!/bin/sh

cat <<CT > /etc/dconf/db/local.d/00-media-automount
[org/gnome/desktop/media-handling]
automount=false
automount-open=false
CT

在DConf中禁用
使用dconf-editor命令打开「dconf Editor」编辑工具,与命令行操作是等价的,只是这里是通过图形化工具进行操作。
打开「dconf Editor」之后,在搜索中,搜索automount关键字,最后将对应的值(automount、automount-open)设置为FALSE即可。
注意事项
设置后是立即生效的。但是插上USB设备后,为什么在文件管理器中还是显示新的设备?此时的设备并没有挂载,当你鼠标浮动到设备上时,显示“Mount and opne XXXX”提示。
如果验证修改是否生效,可以使用mount | grep /dev/sdxx命令进行检验。
参考文献
How to disable media automount in GNOME How can I use gsettings to disable device automount in Ubuntu 16.04? Disabling USB automount in GNOME3[……]

READ MORE

「Quota」- 磁盘配额

什么是磁盘配额?
用于限制用户或者组在指定的分区上可用的磁盘空间或文件个数。
常见概念及使用范围
用户配额和组配额
既可以对用户进行配额,也可以对组进行配额。
磁盘容量限制和文件个数限制
既可以限制用户的可用磁盘空间,也可以限制用户可创建的文件数。
软限制和硬限制
软限制为一个告警界限,达到软限制后,用户将收到警告。
硬限制是真正的限制,达到这个限制之后,用户就不能在使用磁盘。
宽限时间
当用户已使用空间介于软限制和硬限制之间,用户收到警告,但是只警告指定的天数,这个天数就是“宽限时间”。如果在宽限时间内,用户不处理(比如删除文件以减少已使用空间),则到达宽限时间后,用户可用空间直接降到软限制的大小。
注意事项
只能限制普通用户和组,不能用于限制root用户; 只能针对于分区; 既可以限制用户占用的磁盘空间大小,也可以限制用户占用的文件个数;
检查内核是否支持磁盘配额
配置磁盘配额
以分区/dev/sda1为例。并假设/dev/sda1,挂载在/mnt/quota/中。我们的目标是限制www用户使用的磁盘空间及创建的文件数。
首先你需要进入/dev/sda1的挂载目录/mnt/quota/中。
#1 开启分区的磁盘配额功能
以usrquota、grpquota挂载分区:mount -o remount,usrquota,grpquota /dev/sda1
#2 创建磁盘配额配置文件
创建初始化的磁盘配额文件:quotacheck -avug
此时会在/mnt/quota/中创建aquota.user、aquota.group这两个文件。
#3 设置用户的磁盘配额
用户和组的磁盘配额信息分别保存在aquota.user、aquota.group这两个文件中,但是不能直接编辑它们,需要使用edquota(8)命令进行编辑。
例如,我们要限制www用户的可用磁盘空间和创建文件个数:edquota -u www
上述命令会打开vi编辑器进行编辑。输出中有七个列,分别是:文件系统、已使用块数、软限制、硬限制、已使用inode数、软限制、硬限制。
#4 修改宽限时间
如果要修改宽限时间,则执行:edquota -t
依旧是启动vi编辑器进行编辑。
#5 启动磁盘配额
配置完成后,执行quotaon -vug /mnt/quota/来启动磁盘配额。
如果要关闭磁盘配额,则可以使用quotaoff(8)命令。
#6 磁盘配额查询
如果要查看磁盘配额的使用情况,可以使用quota命令:quota -vsu www
或者repquota命令:reqquota[……]

READ MORE

「SSHFS」- 通过 SSH 挂在远程目录

sshfs用于将远程服务器的目录挂载到本地目录中,可以达到像编辑本地文件一样直接编辑远程服务器文件,而不再需要那种“繁琐”操作(先ssh到远程服务器,再执行vim编辑文件,当然某些情况下,还是需要这种“繁琐”操作的)。
虽然sshfs不支持Windows系统,但是Windows中可以使用替代品win-sshfs,一样的效果。
在 Linux 中,使用 sshfs 工具
https://github.com/libfuse/sshfs Solving SSHFS ‘Permission Denied’ How To Use SSHFS to Mount Remote File Systems Over SSH

sshfs -o allow_other,defer_permissions,IdentityFile=~/.ssh/id_rsa \
root@xxx.xxx.xxx.xxx:/ \
/mnt/droplet

allow_other:允许其他用户访问
在 Windows 中,使用 win-sshfs 工具
安装依赖
由于win-sshfs依赖于Dokan,所以先安装Dokan后,再安装win-sshfs。 Dokan项目地址:https://github.com/dokan-dev/dokany Doken下载地址:https://github.com/dokan-dev/dokany/releases 有关Doken版本的选择及安装,参考:https://github.com/dokan-dev/dokany/wiki/Installation
因为使 Windows XP 系统,所以使用 0.6.0 版本。文档有说明:https://github.com/dokan-dev/dokany/wiki/Installation
双击运行 DokanInstall_0.6.0.exe 进行安装。
下载并安装
win-sshfs项目地址:https://github.com/Foreveryone-cz/win-sshfs win-sshfs下载地址:https://github.com/Foreveryone-cz/win-sshfs/releases
双击运行 win-sshfs-0.0.1.5-setup.exe 进行安装。
附加说明
如果访问有问题,Dokan和win-sshfs的下载也可以使用:http://pan.baidu.com/s/1hrGcHkK
使用方法
如图所示,点击 <Mount> 后,会将 10.10.30.2 的 / 目录挂载到 H 盘:
常见错误列表[……]

READ MORE

「XFS」- Extents File System

Attr – extended attributes on XFS filesystem objects http://savannah.nongnu.org/projects/attr
参考文献
Wikipedia/XFS 百度百科/xfs[……]

READ MORE

「inotify」

参考文献
Homepage: https://github.com/rvoicilas/inotify-tools/wiki Wikipedai / inotify: https://en.wikipedia.org/wiki/Inotify man 7 inofity: http://man7.org/linux/man-pages/man7/inotify.7.html

章节列表
「inotifywait」- 检测在目录中发生修改的文件 「inotify-tools」[……]

READ MORE

「inotify-tools」

检查内核是否支持 inotify 特性
inofity 是在 2.6.13 引入的。执行 ll /proc/sys/fs/inotify 命令:
输出以上三项表示支持 inotify 特性。
安装 inotify-tools 工具
从发行版的源中安装

apt-get install inotify-tools

使用源码编译安装
参考:https://github.com/rvoicilas/inotify-tools/wiki#user-content-everyone-else
安装的可执行程序
inotifywatch – 使用 inotify 收集文件系统访问统计信息;显示统计数据;
inotifywait – 检测文件变化;输出发生修改文件;
参考文献
Home · inotify-tools/inotify-tools Wiki[……]

READ MORE

「inotifywait」- 检测在目录中发生修改的文件

inotifywait, 使用inotify来等待发生文件更改。

# inotifywait -m ~/
Setting up watches.
Watches established.
/home/k4nz/ OPEN .ICEauthority
/home/k4nz/ ACCESS .ICEauthority
/home/k4nz/ ACCESS .ICEauthority

补充说明
如果想要知道哪个进程修改了文件,需要使用 auditd 工具。
参考文献
man 1 inotifywait, version 3.14 shell script – How to use inotifywait to watch a directory for creation of files of a specific extension linux – Find which process is modifying a file – Unix & Linux Stack Exchange[……]

READ MORE

「Linux」- 内核

查看内核模块的对应文件
-「How to find kernel module for a given device?」
# modinfo -F filename nouveau
禁用内核模块
-「How do I disable a kernel module persistently?」 修改/etc/modprobe.d/blacklist.conf中加入blacklist wacom配置行。
# sysctl
「archlinux/sysctl」 用于在运行时检查和修改内核参数。[……]

READ MORE

「Linux」- 内核升级

CentOS 7.x
How to Upgrade the Linux Kernel on CentOS 7 | PhoenixNAP KB

# 升级系统
yum update -y

# 添加 ELRepo 仓库
rpm –import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

# 查看可用内核版本
yum list available –disablerepo=’*’ –enablerepo=elrepo-kernel

# 安装新内核
yum remove -y kernel-headers kernel-tools kernel-tools-libs
yum –enablerepo=”elrepo-kernel” install -y kernel-ml kernel-ml-devel \
kernel-ml-headers kernel-ml-tools kernel-ml-tools-libs kernel-ml-tools-libs-devel

# 重新启动系统,并手动选择内核版本,验证功能
# 略……

# 设置默认内核版本
grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

版本回退、降级
Ubuntu 20.04 TLS
How to remove a newer kernel while booted with the older kernel?

# apt-get install -y <Old Version>

# apt-get remove -y “<New Version>”

// 在卸载过程中,可能会安装更新版本的内核。
// 该场景多是:当前内核版本不是最新的,但也不是最旧的
// 解决方法是卸载自动安装的新内核

# apt-get remove -y “<Newer Version>”

参考文献
How to Upgrade the Linux Kernel on CentOS 7 How to set default boot kernel on Linux ( CentOS / RHEL 7 ) 22 | 答疑(三):文件系统与磁盘的区别是什么?[……]

READ MORE

「CentOS 7」- Disable plymouth

系统启动时间分析:systemd-analyze time
禁用 Plymouth 功能:

#!/bin/sh

# 修改
vim /etc/default/grub
# 在「GRUB_CMDLINE_LINUX_DEFAULT」追加:nouveau.modeset=0 rd.plymouth=0 plymouth.enable=0

# 备份
cp /boot/grub2/grub.cfg{,.backup}

# 更新
grub2-mkconfig -o /boot/grub2/grub.cfg

# 如果使用了 EFI 功能
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

# 重启

参考文献
Disable plymouth and boot much faster than before![……]

READ MORE