标签: disk

使用 /proc/vmstat 文件的磁盘 I/O 延迟

如何计算Linux中的磁盘读写延迟?

/proc是否可以使用文件系统进行计算?

我正在使用iostatvmstat命令。但我不明白计算是如何进行的。

我用这段代码进行计算。

  #include <stdlib.h>
  #include <stdio.h>
  #include <string.h>
  #include <sys/sysinfo.h>

  int main(int argc, char * * argv) {
  struct sysinfo si;
  sysinfo( & si);
  const double xdt = 1024;
  float pagein, pageout, oldvalin = 0, oldvalout = 0, res;
  for (;;) {
    FILE * fp = fopen("/proc/vmstat", "r");
    char tmp[256];
    char subbuff[256];
    while (fp != NULL && fgets(tmp, sizeof(tmp), fp) != NULL) {
      if (strstr(tmp, "pgpgin")) {
        memcpy(subbuff, & tmp[7], 40);
        subbuff[40] = …
Run Code Online (Sandbox Code Playgroud)

linux filesystems io proc disk

5
推荐指数
0
解决办法
3575
查看次数

我可以在已安装的驱动器上以只读模式安全地运行坏块吗?

我将 /dev/sda 安装在 / 上,作为根分区。我可以badblocks在此设备上安全地以只读模式运行吗?它会因为安装而显示误报/漏报吗?

filesystems mount badblocks hard-disk disk

5
推荐指数
1
解决办法
2663
查看次数

调整顺序磁盘读取以提高性能

我正在从磁盘中顺序读取一个大文件,并尝试iostat在读取过程中理解输出。

  • 文件大小:10 GB
  • 读取缓冲区:4 KB
  • 预读 (/sys/block/sda/queue/read_ahead_kb):128 KB

输出iostat如下

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz await r_await w_await  svctm  %util
sda               0.00     0.00  833.00   14.00   103.88     0.05   251.30     6.07    5.69    2.33 205.71  1.18 100.00
Run Code Online (Sandbox Code Playgroud)

计算 I/O 请求的平均大小 =(rMB/s 除以 r/s)得出 ~ 128 KB,这是预读值。这似乎表明,虽然 read 系统调用指定了 4KB 缓冲区,但实际磁盘 I/O 是根据预读值发生的。

当我将预读值增加到256KB时,iostat输出如下

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00    28.00  412.00   12.00   102.50     0.05 …
Run Code Online (Sandbox Code Playgroud)

linux performance disk

5
推荐指数
1
解决办法
1830
查看次数

如何查看磁盘属于哪个盘符?

lsscsi告诉我我有许多磁盘和盘柜。

我可以用来$ ls /sys/class/enclosure/6:0:10:0/ArrayDevice*/device/scsi/disk获取 6:0:10:0 机箱下磁盘的所有 scsi 地址的列表。

我可以将该列表与lsscsi输出相关联,以查看每个磁盘的位置。

但我当然不需要编写脚本来自动执行此操作。udevadm有没有类似的工具sg_ses可以为我完成这项任务?

linux udev scsi disk

5
推荐指数
1
解决办法
3431
查看次数

磁盘使用情况相当于 Windows 任务管理器中的磁盘使用情况

我想知道如何像在 Windows 任务管理器中一样检查 Linux 中的磁盘使用情况。

我的意思是,我不想知道分区上有多少可用空间或类似的东西,我想知道在给定时刻磁盘使用了多少。

这是一个 gif:https://i.gyazo.com/4a91e7ed2e519d6fe628811d7c03d6c3.gif

当我打开程序时,它使用得更多。

disk

5
推荐指数
1
解决办法
1435
查看次数

如何恢复 vgscan 和 lvmdiskscan 未找到的丢失的 LVM 卷组

我有一篇文章:如何复制旧磁盘数据\xef\xbc\x9f

\n\n

答案很好,但对我没有帮助。答案用户建议我在那里开一个新帖子,因为这是一些区别。

\n\n

我尝试使用扫描系统查找我的旧卷组vgscan,但它找不到我的旧卷组。

\n\n

我也曾经lvmdiskscan寻找过我的旧物理卷,不幸的是,lvmdiskscan找不到它。以下是输出lvmdiskscan

\n\n
[root@localhost mapper]# lvmdiskscan\n  /dev/ram0             [      16.00 MiB] \n  /dev/loop0            [     930.53 GiB] \n  /dev/root             [      50.00 GiB] \n  /dev/ram1             [      16.00 MiB] \n  /dev/sda1             [     500.00 MiB] \n  /dev/VolGroup/lv_swap [       7.05 GiB] \n  /dev/ram2             [      16.00 MiB] \n  /dev/sda2             [     931.02 GiB] \n  /dev/VolGroup/lv_home [     873.97 GiB] \n  /dev/ram3             [      16.00 MiB] \n  /dev/ram4             [      16.00 MiB] \n  /dev/ram5             [      16.00 MiB] \n …
Run Code Online (Sandbox Code Playgroud)

linux lvm data-recovery disk

5
推荐指数
1
解决办法
2万
查看次数

禁用写回缓存限制 - 调整 vm.dirty_ratio

我的工作负载在短时间内具有极高的写入突发率。目标磁盘相当慢,但我有足够的 RAM 并且非常能容忍瞬时数据丢失。

我尝试调整 vm.dirty_ratio 以最大限度地利用用于脏页的可用 RAM 空间。

# free -g
              total        used        free      shared  buff/cache   available
Mem:            251           7         213           3          30         239
Swap:             0           0           0

# sysctl -a | grep -i dirty
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 5
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 90000
vm.dirty_ratio = 90
Run Code Online (Sandbox Code Playgroud)

但是,我似乎仍然遇到一些基于底层磁盘速度的写回限制。我怎样才能禁用这个功能?

# dd if=/dev/zero of=/home/me/foo.txt bs=4K count=100000 oflag=nonblock
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 10.2175 s, 40.1 MB/s
Run Code Online (Sandbox Code Playgroud)

只要有空闲内存并且脏率尚未超过 - 我想全速写入页面缓存。

linux filesystems cache disk

5
推荐指数
1
解决办法
1926
查看次数

smartctl megaraid,N (如何找到 N 的正确值?)

我们在 sdb 磁盘上运行 smartctl

smartctl -a /dev/sdb
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-327.el7.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

Smartctl open device: /dev/sdb failed: DELL or MegaRaid controller, please try adding '-d megaraid,N'
Run Code Online (Sandbox Code Playgroud)

根据 smartctl 的输出,我们将其更改为

 smartctl -a -d megaraid,0 /dev/sdb
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-327.el7.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor:               TOSHIBA
Product:              MG04SCA20ENY
.
.
Run Code Online (Sandbox Code Playgroud)

我根据第一条总线设置 - 0 (来自 smartctl --scan )

smartctl  --scan …
Run Code Online (Sandbox Code Playgroud)

linux rhel fdisk smartctl disk

5
推荐指数
1
解决办法
2万
查看次数

dd 不会覆盖磁盘

我在 Windows 主机上的虚拟机 (VMWare) 中运行 Ubuntu 18.04.1。我正在尝试使用 dd 将整个 SD 卡清零。这是我用来向软件组发布嵌入式 Linux 的过程的一部分(当空 FS 数据全为 0 时,SD 卡映像压缩得更好)。

我正在使用的命令是:sudo dd if=/dev/zero of=/dev/sdc bs=4M status=progress并且它成功完成;我收到传输记录的打印输出,以及一条消息,指出设备上没有剩余空间。如果我随后查看sudo cat /dev/sdc | hexdump磁盘内容,磁盘仍然充满数据并且不是零(不仅仅是在末尾)。

我是否必须指定 SD 卡的字节数才能使其一致工作?我每次将 SD 卡清零时都不会出现此问题。

完整的控制台输出:

gen-ccm-root@ubuntu:~$ sudo dd if=/dev/zero of=/dev/sdc bs=4M status=progress
15929966592 bytes (16 GB, 15 GiB) copied, 1274 s, 12.5 MB/s
dd: error writing '/dev/sdc': No space left on device
3799+0 records in
3798+0 records out
15931539456 bytes (16 GB, 15 GiB) copied, 1274.19 s, …
Run Code Online (Sandbox Code Playgroud)

dd disk

5
推荐指数
1
解决办法
1389
查看次数

在 ext4 中调整分区大小安全吗?

我想减少磁盘上 ext4 分区的大小,并且想知道我的文件在操作过程中是否可能损坏?我了解到 ext4 文件系统对每个文件使用大范围,因此文件是否可能位于分区末尾并在此过程中损坏/删除?

partition ext4 disk

5
推荐指数
1
解决办法
4378
查看次数

标签 统计

disk ×10

linux ×6

filesystems ×3

badblocks ×1

cache ×1

data-recovery ×1

dd ×1

ext4 ×1

fdisk ×1

hard-disk ×1

io ×1

lvm ×1

mount ×1

partition ×1

performance ×1

proc ×1

rhel ×1

scsi ×1

smartctl ×1

udev ×1