我可以在不重新启动的情况下扩大根 ( /) 分区fdisk(删除使用相同的第一个扇区重新创建它,但最后一个扇区更大)。
但是,我无法让内核重新读取分区表:
# partx -va /dev/vda
partx: /dev/vda: adding partition #5 failed: Device or resource busy
partx: /dev/vda: error adding partition 5
# kpartx -va /dev/vda
device-mapper: reload ioctl on vda5 failed: Invalid argument
add map vda5 : 0 41492480 linear 0:0 2048
# hdparm -z /dev/vda
/dev/vda:
re-reading partition table
BLKRRPART failed: Device or resource busy
# sfdisk -R /dev/vda
BLKRRPART: Device or resource busy
This disk is currently in use. …Run Code Online (Sandbox Code Playgroud) 在我使用 LVM 的服务器上,我在单个驱动器 (PV) 上有一个简单的线性 LV。现在,我向服务器添加了另外 2 个(相同大小)驱动器 (PV)。
如果可能的话,我想将我现有的线性 LV 转换为跨 3 个驱动器的条带化 LV(类似 RAID0)。由于条带化,这将使我能够提高性能。我知道这在理论上是可能的。
我尝试了很多东西,比如基于这个网站技术为我的 LV 创建一个条纹镜像,但在我的情况下它更复杂,因为我想继续使用原始驱动器(在网站上,它是从单个驱动器的迁移LV 到 3 个其他驱动器)。
我越来越熟悉 pvmove,lvconvert和其他 LVM 工具,但没有成功。请帮忙。:)
如果需要,我在另一个驱动器上的额外空间很少(大约是我原始 LV 大小的 5%)。
我lvdisplay -m的如下:
--- Logical volume ---
LV Path /dev/vg_space/vol_space
LV Name vol_space
VG Name vg_space
LV Status available
# open 1
LV Size 260.75 GiB
Current LE 66752
Segments 1
Allocation inherit
Read ahead sectors auto
- currently …Run Code Online (Sandbox Code Playgroud) 在 Debian Linux 3.16 机器上,我使用了 244 MB 的交换空间:
# free -h
total used free shared buffers cached
Mem: 94G 36G 57G 1.9G 3.8G 11G
-/+ buffers/cache: 20G 73G
Swap: 487M 244M 243M
Run Code Online (Sandbox Code Playgroud)
看看这个,我找不到使用的 244 MB。
# for file in /proc/*/status ; do grep VmSwap $file; done | sort -nk 2 | tail
VmSwap: 0 kB
VmSwap: 0 kB
VmSwap: 0 kB
VmSwap: 0 kB
VmSwap: 0 kB
VmSwap: 0 kB
VmSwap: 4 kB
VmSwap: 12 kB
VmSwap: 16 kB
VmSwap: …Run Code Online (Sandbox Code Playgroud) 我在 VMware + SAN 上有几个 Linux VM。
SAN 上出现问题(失败路径),因此有一段时间,Linux VM 驱动器上出现 I/O 错误。当路径故障转移完成时,为时已晚:每台 Linux 机器都认为其大部分驱动器不再“值得信赖”,将它们设置为只读设备。根文件系统的驱动器也受到影响。
mount -o rw,remount / 没有成功, echo running > /sys/block/sda/device/state 没有成功,/sys以找到解决方案,但没有成功。blockdev --setrw /dev/sda我不得不重新启动我所有的 Linux VM。Windows 虚拟机很好...
问题描述为here。VMware 建议增加 Linux scsi 超时以防止发生此问题。
但是,当问题确实最终会发生,有没有办法让驱动器回读写模式?(一旦 SAN 恢复正常)
我想deadline成为我系统的默认 IO 调度程序,并且我不想在重新启动时丢失该配置。这样做的正确方法是什么?(我正在使用 Debian)
一些提示:
echo deadline >| /sys/block/sda/queue/scheduler,elevator=deadline,udev类似的规则SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="deadline",什么是“首选”解决方案?
编辑:我可以有一个配置,将 iosched 设置为deadline仅适用于启动时存在的驱动器,而不适用于后续的热插拔驱动器(如 USB 密钥)?
在Linux上,是否mount -o remount,ro刷新文件系统缓冲区/缓存,或者我也应该运行sync来实现这一点?
我正在尝试创建用户 lenny,该用户在文件夹中/home/lenny/具有读写权限,并且没有外壳,但只能通过 SFTP 访问。我正在做以下事情:
useradd lenny
mkdir /home/lenny
usermod -d /home/lenny lenny
passwd lenny
chown lenny:lenny /home/lenny
chmod 755 /home/lenny
usermod -s /bin/false myuser
Run Code Online (Sandbox Code Playgroud)
然后我修改了/etc/ssh/sshd_config:
Subsystem sftp internal-sftp`
Match User lenny
ChrootDirectory /home/lenny
ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)
现在,当我这样做时,sftp lenny@server我可以通过执行cd /和轻松离开 CHROOT ls -la,我看到了一切!
这是为什么???我不明白,配置应该没问题,还是我错了?
在 Linux 上运行blockdev --flushbufs和在实践上有区别sync(1)吗?(除了blockdev针对特定设备进行刷新和sync系统范围内的冲洗)。
sync(1)手册页说它刷新文件系统缓冲区(仅?)。如果在dd不经过文件系统层的情况下对驱动器进行 I/O(比如),sync真的无效吗?
我什么时候应该使用一个而不是另一个?
有2种情况:
由于驱动器访问通常通过 Linux SCSI 层,我认为超时情况完全由该层处理。根据此文档,它会在重置驱动器、总线、主机等后多次尝试该命令。如果这些都不起作用,SCSI 层将使设备脱机。在这一点上,我认为 md 层只是“发现”一个驱动器不见了,并将其标记为丢失(失败)。这样对吗?
某些驱动器可以配置为在达到特定超时后报告读取错误,从而中止内部恢复尝试。这称为ERC(或 TLER、CCTL)。磁盘超时通常配置为在操作系统超时(或硬件 RAID 控制器)之前触发,以便后者知道真正发生了什么,而不仅仅是“等待和中止”。
我的问题是:Linux(和 md)如何处理驱动器报告的读取错误?
它会再试一次,做一些聪明的事情,还是只是让驱动器脱机而不通过上面“内核超时”中描述的所有尝试?当这种事情发生时,md 甚至知道吗?
有些人认为ERC 在 Linux 上很危险,因为它不会给驱动器足够的时间来尝试恢复。他们还说 ZFS-raid 很好,因为如果发生读取错误,由于 RAID 冗余,它会计算丢失的不可读扇区数据,并将其覆盖回驱动器。然后后者应该停止尝试读取讨厌的扇区,自动将其标记为坏的(不再使用),并将其重新映射到一个良好的扇区。
md 也能做到这一点吗?