CUBE SUGAR CONTAINER

技術系のこと書きます。

dd コマンドの進捗を確認する

dd コマンドの進捗を確認したいときは macOS であれば SIGINFO を、Linux (GNU Coreutils) であれば SIGUSR1 を送れば良い。 また、GNU Coreutils の dd には status=progress というオプションもある。

macOS

まずは macOS から。

使った環境は次の通り。

$ sw_vers                          
ProductName:    Mac OS X
ProductVersion: 10.14.5
BuildVersion:   18F132

適当にランダムな値でファイルを作らせる。

$ dd if=/dev/urandom of=example bs=1m count=1024

別のターミナルを開いたら killall を使って dd に SIGINFO を送りつける。

$ sudo killall -INFO dd

すると、次のように現状が表示される。

$ dd if=/dev/urandom of=example bs=1m count=1024
298+0 records in
298+0 records out
312475648 bytes transferred in 11.867853 secs (26329585 bytes/sec)

定期的に表示させたいときは watch コマンドと組み合わせると良い。

$ brew install watch

以下のようにすると 1 秒ごとに SIGINFO を送ることができる。

$ watch -n 1 sudo killall -INFO dd

結果として、次のように 1 秒ごとに進捗が表示される。

$ dd if=/dev/urandom of=example bs=1m count=1024
...(snip)...
501+0 records in
500+0 records out
524288000 bytes transferred in 19.181651 secs (27332788 bytes/sec)
528+0 records in
528+0 records out
553648128 bytes transferred in 20.254623 secs (27334408 bytes/sec)
557+0 records in
557+0 records out
584056832 bytes transferred in 21.357118 secs (27347175 bytes/sec)
...(snip)...

Linux (GNU Coreutils)

続いて Linux を。

使った環境は次の通り。

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"
$ uname -r
4.15.0-54-generic
$ dd --version
dd (coreutils) 8.28
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Paul Rubin, David MacKenzie, and Stuart Kemp.

先ほどと同じように適当なファイルを作らせておく。

$ sudo dd if=/dev/urandom of=example bs=1M count=1024

GNU Coreutils の dd であれば SIGUSR1 を送る。

$ sudo killall -USR1 dd

次のように進捗が表示される。

$ sudo dd if=/dev/urandom of=example bs=1M count=1024
95+0 records in
95+0 records out
99614720 bytes (100 MB, 95 MiB) copied, 1.4874 s, 67.0 MB/s

定期的に表示させたいときは、先ほどと同じように watch と組み合わせれば良い。

$ sudo apt-get -y install procps
$ watch -n 1 sudo killall -USR1 dd

次のように定期的に進捗が表示されるようになる。

$ sudo dd if=/dev/urandom of=example bs=1M count=1024
...(snip)...
348+3 records in
347+3 records out
365930880 bytes (366 MB, 349 MiB) copied, 6.29171 s, 58.2 MB/s
408+3 records in
407+3 records out
428845440 bytes (429 MB, 409 MiB) copied, 7.32246 s, 58.6 MB/s
467+3 records in
467+3 records out
491760000 bytes (492 MB, 469 MiB) copied, 8.34007 s, 59.0 MB/s
...(snip)...

あるいは、もっと単純に status=progress というオプションを付けても良い。

$ sudo dd if=/dev/urandom of=example bs=1M count=1024 status=progress
605028352 bytes (605 MB, 577 MiB) copied, 10 s, 60.4 MB/s

いじょう。