标签: io

我可以查看“同步”操作的进度吗?

我已将一个大文件复制到安装在带有异步 Linux 系统上的 USB 磁盘中。这相对较快地返回到命令提示符,但是当我键入时sync,当然,它必须全部转到磁盘,这需要很长时间。

我知道它会很慢,但是有什么地方可以让我看到计数器降到零吗?看着bufferstop没有帮助。

linux filesystems io async

144
推荐指数
4
解决办法
7万
查看次数

将标准输出重定向到您没有写权限的文件

当您尝试在没有写入权限的情况下修改文件时,您会收到错误消息:

> touch /tmp/foo && sudo chown root /tmp/foo
> echo test > /tmp/foo
zsh: permission denied: /tmp/foo
Run Code Online (Sandbox Code Playgroud)

Sudoing 没有帮助,因为它以 root 身份运行命令,但 shell 处理重定向 stdout 并以您的方式打开文件:

> sudo echo test > /tmp/foo
zsh: permission denied: /tmp/foo
Run Code Online (Sandbox Code Playgroud)

除了以root身份打开shell并以这种方式操作文件之外,是否有一种简单的方法可以将stdout重定向到您无权写入的文件?

> sudo su
# echo test > /tmp/foo
Run Code Online (Sandbox Code Playgroud)

shell permissions io sudo io-redirection

125
推荐指数
4
解决办法
2万
查看次数

dd什么时候适合拷贝数据?(或者,什么时候 read() 和 write() 是部分的)

简短版本:在什么情况下可以dd安全地用于复制数据,安全意味着不存在由于部分读取或写入而导致损坏的风险?

长版本 — 序言: dd通常用于复制数据,尤其是从设备复制数据或向设备复制数据(示例)。有时将其归因于能够以比其他工具更低的级别访问设备的神秘特性(实际上是设备文件在发挥作用)——但dd if=/dev/sdacat /dev/sda. dd有时被认为更快,但cat在实践中可以击败它。尽管如此,它dd具有独特的特性,使其有时真正有用

问题: dd if=foo of=bar实际上与cat <foo >bar. 在大多数 unices¹ 上,ddread(). (我发现POSIX在什么构成“读取输入块”方面很模糊dd。)如果read()返回部分结果(根据 POSIX 和其他参考文档,除非实现文档另有说明,否则允许这样做),则复制部分块。存在完全相同的问题write()

观察:在实践中,我发现dd可以处理块设备和常规文件,但这可能只是我没有太多练习。说到管道,不难找dd错;例如试试这个代码

yes | dd of=out bs=1024k count=10
Run Code Online (Sandbox Code Playgroud)

并检查out文件的大小(它可能远低于 10MB)。

问题:在什么情况下可以dd安全地用于复制数据?换句话说,在块大小、实现、文件类型等方面的哪些条件可以确保dd将复制所有数据?

GNU dd有一个 …

io dd

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

延迟将数据写入磁盘背后的理念是什么?

在 Linux 中,诸如cp或之类的命令的完成执行dd并不意味着数据已写入设备。例如,必须调用sync或调用驱动器上的“安全删除”或“弹出”功能。

这种方法背后的哲学是什么?为什么不一次写入数据?是否存在因 I/O 错误而导致写入失败的危险?

drivers kernel io unix-philosophy

71
推荐指数
7
解决办法
2万
查看次数

/dev/stdin、/dev/stdout 和 /dev/stderr 的可移植性如何?

有时,我需要指定标准 IO 流 ( stdin, stdout, stderr)之一的“等效路径” 。因为我 99% 的时间都在使用 Linux,所以我只是/dev/在准备 get/dev/stdin等,而这“似乎做对了”。但是,一方面,我一直对这样的理由感到不安(因为,当然,“它似乎有效”,直到它没有为止)。此外,我对这种操作的便携性没有很好的了解。

所以我有几个问题:

  1. 在Linux中的情况下,它是安全(是/否)划上等号stdinstdout以及stderr/dev/stdin/dev/stdout/dev/stderr

  2. 更一般地说,这个等价物是否“足够便携”?

我找不到任何 POSIX 参考。

io file-descriptors posix portability

69
推荐指数
4
解决办法
2万
查看次数

如何从bash中的变量逐行读取?

我有一个包含命令的多行输出的变量。从变量中逐行读取输出的最有效方法是什么?

例如:

jobs="$(jobs)"
if [ "$jobs" ]; then
    # read lines from $jobs
fi
Run Code Online (Sandbox Code Playgroud)

shell bash io cat

68
推荐指数
5
解决办法
26万
查看次数

确定负责高 I/O 的特定文件

这是一个简单的问题,但我第一次不得不真正解决它:找到哪些特定文件/inode 是大多数 I/O 的目标。我希望能够获得一般系统概述,但如果我必须提供 PID 或 TID,我可以接受。

我想不用strace对弹出的程序做任何操作iotop。最好使用与iotop按文件逐项列出的工具相同的工具。我可以lsof用来查看邮递员打开了哪些文件,但它不指示哪个文件正在接收 I/O 或接收了多少。

我在其他地方看到有人建议使用它,auditd但我不想这样做,因为它会将信息放入我们的审计文件中,我们将其用于其他目的,这似乎是我应该能够研究的问题通过这种方式。

我现在遇到的具体问题是 LVM 快照填充太快。我已经解决了这个问题,但希望能够以这种方式修复它,而不是仅仅ls对所有打开的文件描述符进行分析/proc/<pid>/fd以查看哪个增长最快。

linux monitoring io profiling

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

测量外壳中的管道吞吐量

有一个 shell 命令可以让您测量数据通过它的速度,因此您可以测量管道中命令的输出速度。所以而不是:

$ somecommand | anothercommand
Run Code Online (Sandbox Code Playgroud)

您可以执行以下操作:

$ somecommand | ??? | anothercommand
Run Code Online (Sandbox Code Playgroud)

我认为,吞吐量统计信息(字节/秒)会打印到 stderr。但我终生无法记住那个命令是什么。

command-line performance io pipe

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

找出正在写入硬盘的进程

在我的联想T400和Ubuntu上,硬盘写入指示灯一直闪烁。我想知道在 Linux 中是否可以找出哪些进程正在对硬盘进行 I/O?就像 by 一样top,您可以找出哪些进程使用最多的 CPU 和内存。

linux process io

39
推荐指数
3
解决办法
9万
查看次数

如何在 Linux 中获得总读取和总写入 IOPS?

如何在 Linux 中使用命令行或以编程方式分别获得读写 IOPS?我已经安装了sysstat包。

请告诉我如何使用sysstat包命令分别计算这些。

或者,是否可以使用文件系统计算它们?

例如: /proc/sys/dev

linux io disk read write

39
推荐指数
1
解决办法
16万
查看次数