我如何安全地摆脱这种情况?
详情如下:
xen 服务器已将块设备分配给 VM。但这些设备也已经安装在 Xen 中。
事实上,这些块设备中有 44 个是这样安装的。更糟糕的是,每个物理设备在 4 条路径上可见,并且每条路径都安装在单独的挂载点上。换句话说,每个设备实际上安装了 5 次。
VM 来宾操作系统通过 PowerPath 伪设备(作为 phy:块设备分配给 domU)查看路径
一些设备被格式化为 ext2 和 reiserfs。
无需向我解释这里涉及的文件系统损坏风险。
恐怕只是卸载文件系统也有可能造成损坏,觉得此时拔掉主机的电源,是最安全的选择。
请注意,所有 VM 中的应用程序(大部分为 Oracle 数据库)仍在运行和使用中。
我在调查 dom0 上的高 CPU 使用率时发现了这一点。有一个无法杀死的“查找”进程,cwd -> /media/disk-12 从/dev/sdf1 挂载,属于/dev/emcpowerr
在有人问之前,我曾经见过进程无法被杀死并继续使用 CPU 和 RAM(与失效/僵尸进程不同)时,是当有未完成的提交 I/O,例如同步返回但尚未物理上磁盘时. 更常见的是,这发生在磁带 I/O 上。
建议!?
PS我希望设备在安装后被“保留”,以防止这种事情?或者这在 Linux 上是不可能的?
编辑:首先,我确信管理程序中的 KDE)是罪魁祸首。看起来 KDE 正在安装它可以在日志记录中创建桌面图标的设备。然而,同样的事情不会发生在其他 Xen 服务器上,但所有其他服务器都运行更旧版本的 SLES 和 KDE ...... V4 似乎是有问题的,3.4 表现更好)。
此外,两个非关键虚拟机已挂起。关闭它们后,由于文件系统损坏,它们将无法再次启动。主/生产虚拟机仍在运行,其上的数据库仍在运行,但显然这是一个定时炸弹。客户正尝试在另一台服务器上的另一台 VM 上重新构建环境,但在配置某些组件时遇到问题,因此我们正在等待...
无论如何,我觉得到目前为止没有一个答案不仅仅是“最佳实践总是优雅地关闭”而且我希望得到更具体的东西......无论如何,我觉得这种情况可能需要更加小心思维。关闭是否会导致未完成的 IO(特别是来自管理程序的文件系统元数据更新)同步并导致潜在的主要文件系统损坏?
我可以使用各种工具来测量当前流经系统的磁盘 I/O 量(例如iotop和iostat),但我很好奇是否可以轻松检测磁盘是否只需要少量输入/输出。
我知道可以使用提取这些信息blktrace然后使用解码它,btt但这些有点笨拙,我希望有一个更简单的替代方案?
我们有一个带有 2 个磁盘(sda和sdb)的 RHEL 7 服务器。我们/,/var/log和swap是上sda,/var是sdb。我们使用 LVM 和 XFS。
sda太大 (160 GB),我们想将其缩小到 40 GB。然后我们可以使用免费的 120 GB 扩展sdb.
[root@foo ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rhel lvm2 a-- 134.77g 9.77g
/dev/sdb1 vg_var lvm2 a-- 200.00g 0
[root@foo ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- 117.19g
swap rhel -wi-ao---- 3.91g …Run Code Online (Sandbox Code Playgroud) 很多时候,尤其是在使用引导加载程序时,我会看到使用的数字驱动器和分区号。例如,在我的/boot/grub/grub.cfgI see 中set root='hd0,gpt2',我的 UEFI 引导条目通常引用驱动器/分区编号,并且它似乎出现在几乎所有涉及引导加载程序的上下文中。
现在我们有了 UUID 和 PARTUUID,以这种方式寻址分区似乎非常不稳定(afaik,不能保证驱动器总是以相同的顺序安装,用户可能会移动插入其主板的驱动器的顺序,等等)
因此,我的问题是双重的:
这个寻址方案是否像我上面概述的那样不稳定?我是否遗漏了标准中的某些内容,这意味着该方案比我预期的要可靠得多,还是因为您的驱动器只是在不同的顺序或将它们插入主板上的不同插槽?
如果上述问题的答案是肯定的,那么为什么还要继续使用这种寻址方案?对所有内容使用 UUID 或 PARTUUID 会不会更加稳定和一致?
出于备份目的,我“快照”了一个 LVM 分区。这个分区是加密的,所以我打开了这个 Luks 分区(快照)来做我的备份。
问题是我忘记删除快照,因此它达到了100%的使用率。
当我尝试删除快照时:
lvremove /dev/mapper/vgx-LogVolDBSnapshot
/dev/vgx/LogVolDBSnapshot: read failed after 0 of 4096 at 375809572864: Input/output error
/dev/vgx/LogVolDBSnapshot: read failed after 0 of 4096 at 375809630208: Input/output error
/dev/vgx/LogVolDBSnapshot: read failed after 0 of 4096 at 0: Input/output error
/dev/vgx/LogVolDBSnapshot: read failed after 0 of 4096 at 4096: Input/output error
/dev/mapper/SnapshotDecrypted: read failed after 0 of 4096 at 375807475712: Input/output error
/dev/mapper/SnapshotDecrypted: read failed after 0 of 4096 at 375807533056: Input/output error
/dev/mapper/SnapshotDecrypted: read failed after 0 …Run Code Online (Sandbox Code Playgroud) 我在 Fedora 26 中的/tmp文件夹上没有可用空间 。这会导致几个问题。
文件夹 /tmp 占用了所有可用 RAM:
$ df -h /tmp
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 3.9G 12k 100% /tmp
$
Run Code Online (Sandbox Code Playgroud)
那么, 我如何手动增加此文件夹的大小以获得更多可用空间而不增加更多 RAM 或从中删除文件?
提前致谢。
我处于令人沮丧的情况 - 无论我如何尝试,gparted 都不会让我将空白空间分配给第一个分区:

中间分区阻止我扩展/dev/sda1。我需要将分区移动/dev/sda2到驱动器的末尾,就像这样(制作的图像):

然后我将能够扩展第一个分区:

怎么做?我假设/dev/sda2必须将数据从物理上复制到驱动器的末尾。
我的目标是从 lsblk 获取大于 100G 的磁盘。
我有它的工作,但它很尴尬。我很确定它可以缩短。要么使用与 lsblk 完全不同的东西,要么我可以直接用 awk 过滤人类可读的数字。
这是我整理的:
lsblk | grep disk | awk '{print$1,$4}' | grep G | sed 's/.$//' | awk '{if($2>100)print$1}'
Run Code Online (Sandbox Code Playgroud)
它只输出大于 100G 的磁盘的 sdx 和 nvmexxx 部分。正是我需要的。
我对此很满意,但渴望向您学习更多
让我从一个例子开始:
当我们检查哪个目录/文件正在消耗根卷上的磁盘空间时,我们使用“du”命令,如下所示:
du -sh /*
Run Code Online (Sandbox Code Playgroud)
但是,这也包括其他分区/卷。
du -x -sh /*
Run Code Online (Sandbox Code Playgroud)
那也做同样的事情。它不排除其他磁盘卷。然而,手册页说:
-x, --one-file-system 跳过不同文件系统上的目录
如果我们看到“/usr”消耗了根文件系统上的大部分磁盘空间,并且它是“/”下的目录,那么对其运行“du -x -sh /usr/*”也会报告“/usr/something” “这是一个单独的磁盘,并且尺寸很大,导致命令退出时有很多延迟。
底线:运行“du”命令或任何其他命令时如何仅显示“一个文件系统”来识别磁盘使用情况和罪魁祸首文件,不包括该目录/文件系统下的任何其他磁盘卷?
谢谢!
disk ×10
partition ×3
linux ×2
lvm ×2
awk ×1
boot-loader ×1
cryptsetup ×1
disk-usage ×1
filesystems ×1
gparted ×1
grep ×1
grub2 ×1
hard-disk ×1
io ×1
lsblk ×1
measure ×1
rhel ×1
systemd ×1
tmpfs ×1
unmounting ×1
uuid ×1
xen ×1