通过阅读本文,似乎将数据复制到不同的硬盘驱动器时, cat 会自动使用最佳块大小(或非常接近)。
我想知道它如何确定最佳块大小,以及 cat 使用的方法是否可以以某种方式应用于 dd。
每次我将文件写入空的原始块设备时,例如
# dd if=image.iso of=/dev/sdb status=progress
Run Code Online (Sandbox Code Playgroud)
我从未使用过任何类型的sync(即sync; conv=fsync; conv=fdatasync; oflag=sync; oflag=dsync)。
我注意到,dd没有永远退出,直到所有的写作完成。
我总是使用 Conky 的 I/O 工具和grep Dirty /proc/meminfo. 此外,设备的校验和始终与写入它的文件的校验和相匹配。所以我总是 100% 确定整个文件已写入设备。
我已将文件写入 ext4 卷进行比较。例如使用:
$ dd if=/dev/urandom of=~/file bs=1M count=50 iflag=fullblock
Run Code Online (Sandbox Code Playgroud)
写入 ext4 卷时,dd退出后在数据实际写入磁盘之前总是有大约 20 秒的延迟。
许多人提倡在sync命令后使用dd命令,或者在写入块设备时sync在dd命令中包含几个选项之一。例如这里和这里。但是,我不知道有人真正证明这是必要的。
此页面上的评论之一是:
sync在这里毫无意义[即直接写入/dev/sdX]。它只影响文件系统操作。
有五个人对这条评论投了赞成票,这与我的经验一致。
那么在写入块设备时,有没有dd在所有写入完成之前退出的情况?这真的发生在任何人身上吗?
其他书写选项如何,例如cp和cat …
我有两个同名目录:
$ ls mydir
file1 file2
$ ls other/mydir
file3 file4
Run Code Online (Sandbox Code Playgroud)
如果我复制mydir到other,则两者mydir合并:
$ cp -r mydir other
$ ls other/mydir
file1 file2 file3 file4
Run Code Online (Sandbox Code Playgroud)
在手册(或信息)页面中的cp哪个位置说它默认执行此操作?
如果我使用cp -rn mydir other.
如果cp问我是否要合并两个mydirs,我会更喜欢它;这样,如果我复制mydir到other而忘记 中已经有不同mydir的other,我可以中止操作。这可能吗?
历史示例:
$ history
1 whoami
2 pwd
3 ls
Run Code Online (Sandbox Code Playgroud)
要获得反转的历史列表,我这样做:
$ history|tac
3 ls
2 pwd
1 whoami
Run Code Online (Sandbox Code Playgroud)
但是有没有更好的方法来做到这一点,也许不需要调用另一个程序,例如对于那些没有安装 tac 的程序?
我一直dd在 Linux 中使用来覆盖外部 USB 硬盘驱动器。
当我使用 512 字节的默认块大小时,使用以下命令:
# dd if=/dev/zero of=/dev/sdb
Run Code Online (Sandbox Code Playgroud)
在整个操作过程中,硬盘驱动器(/dev/sdb)被交替读取和写入,一次大约 1GB。即read 1GB... ... write 1GB... ... read 1GB... ...write 1GB等尽可能多的数据从硬盘读出被写入。
我知道这是因为它显示在我的自定义 Conky 面板 ( diskio_read, diskio_write) 中,我知道它是磁盘 I/O 活动的 100% 可靠指标。
我在另一台计算机上使用不同的外部硬盘驱动器重复了这一点。它通过 USB 2.0 和 USB 3.0 发生。
相比之下,当我做同样的事情,但使用 1MB 的块大小时,使用以下命令:
# dd if=/dev/zero of=/dev/sdb bs=1M
Run Code Online (Sandbox Code Playgroud)
除了开始时有少量读取外,在运行过程中根本不读取硬盘驱动器。
鉴于这种现象发生在我的两台不同的计算机和两个不同的硬盘上,使用标准的 Linux 发行版(Xubuntu 14.04),任何想要的人都应该能够在自己的计算机上复制它。
有人可以解释一下这里发生了什么吗?
我曾经md5sum与pv检查是在同一个目录中的文件的4吉布:
md5sum dir/* | pv -s 4g | sort
Run Code Online (Sandbox Code Playgroud)
该命令在大约 28 秒内成功完成,但pv的输出全是错误的。这是在整个过程中显示的那种输出:
219 B 0:00:07 [ 125 B/s ] [> ] 0% ETA 1668:01:09:02
Run Code Online (Sandbox Code Playgroud)
没有-s 4g和也是这样| sort。我也尝试过使用不同的文件。
我试过使用pvwithcat并且输出很好,所以问题似乎是由md5sum.
如果我创建以下目录结构:
mkdir -p dir1/dir2/dir3/dir4
Run Code Online (Sandbox Code Playgroud)
然后我运行find dir1,它返回:
dir1
dir1/dir2
dir1/dir2/dir3
dir1/dir2/dir3/dir4
Run Code Online (Sandbox Code Playgroud)
如果我运行find dir1 -empty,它只返回:
dir1/dir2/dir3/dir4
Run Code Online (Sandbox Code Playgroud)
显示只有 dir4 是空的。
但是,如果我运行find dir1 -empty -delete,所有四个目录都会立即删除。
我希望只删除 dir4,然后下次运行命令时,只删除 dir3,依此类推。为什么会发生这种情况,以及如何使用 仅删除 dir4 find?
是否有任何 Linux 程序提供与 Sysinternals DiskView 相同(或部分)的功能,尤其是能够查看硬盘上文件的物理位置?
DiskView 网址:http ://technet.microsoft.com/en-gb/sysinternals/bb896650
如果我无意中在命令中添加了换行符,据我所知,撤消它的唯一方法是按 Ctrl+c 并再次键入命令。例如:
$ cat 'John's File'
> ^C
$ cat "John's File"
Run Code Online (Sandbox Code Playgroud)
如果原始命令很长,这很烦人。
有没有办法删除换行符并删除>提示,以便我可以返回到原始命令?
当我在 GTK3 程序中的滚动条滑块上单击超过一秒时,它变窄并且滚动变得非常缓慢。
我知道这是故意的,但我觉得这很烦人。
我找不到有关如何禁用此行为的任何说明。任何人都可以帮忙吗?