ファイルを吐かないというのは、MySQLのdatadirをtarボールに固めながら圧縮してS3にアップロードするようなケース(なんて限定的)
$ tar -C /var/lib -c mysql | pzstd -qc | aws s3 cp - s3://...
S3さん、アップロード終わるまで状況が見えないので、保管先のファイルサイズから全体をざっくり見積もることができなかった。俺のやり方が悪いだけかも知れない。
取り敢えず
lsof
で今掴んでいるファイルを見ることくらいまではぱっと思い付いた。$ ps auxww | grep tar
root 1181 0.0 0.4 289208 4800 ? Ssl 23:15 0:00 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker-containerd-shim --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --runtime docker-runc --runtime-args --systemd-cgroup=true
yoku0825 3259 0.3 0.1 123344 1232 pts/0 S+ 23:22 0:00 tar c data
yoku0825 3263 0.0 0.0 112644 968 pts/1 R+ 23:22 0:00 grep --color=auto tar
$ lsof -p 3259
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
..
tar 3259 yoku0825 0u CHR 136,0 0t0 3 /dev/pts/0
tar 3259 yoku0825 1w FIFO 0,8 0t0 28213 pipe
tar 3259 yoku0825 2u CHR 136,0 0t0 3 /dev/pts/0
tar 3259 yoku0825 3r DIR 253,0 4096 71088914 /usr/mysql/5.7.19/data
tar 3259 yoku0825 4r REG 253,0 21091934 68051378 /usr/mysql/5.7.19/data/bin.000011
たとえば今は
bin.000011
を掴んでる、というところまではわかる。
が、
tar
コマンドってファイルをどういう順番で掴むのかがわからず、bin.000011
が全体で何番目のファイルなのかよくわからない。
経験則として、 tar cvf
とか tar xvf
でファイル名だだーっと流している時でも、少なくともファイルパスでソートされているようには見えない。
困った時のソースコード。
ディレクトリーをターゲットにtarボールを作る時には
create_archive
⇒ dump_file
⇒ dump_file0
⇒ dump_dir
⇒ get_directory_entries
と来て、その中からgnulib のstreamsavedir
を呼び出している。streamsavedir
がやってることは単に readdir しているだけで、この時の並び順は特に決まった規則がある訳ではないらしい。$ ls -fl
total 239212
drwxr-x--- 9 yoku0825 yoku0825 4096 Oct 3 23:10 .
drwxrwxr-x 11 yoku0825 yoku0825 148 Jul 18 15:13 ..
-rw-r----- 1 yoku0825 yoku0825 79691776 Oct 3 23:10 ibdata1
-rw-r----- 1 yoku0825 yoku0825 56 Jul 18 15:12 auto.cnf
drwxr-x--- 2 yoku0825 yoku0825 4096 Aug 22 18:29 mysql
...
drwxr-x--- 2 yoku0825 yoku0825 4096 Aug 10 15:10 i_s
drwxr-x--- 2 yoku0825 yoku0825 8192 Aug 10 15:10 p_s
-rw-r----- 1 yoku0825 yoku0825 3818805 Aug 18 18:52 bin.000006
-rw-r----- 1 yoku0825 yoku0825 21091934 Aug 24 18:41 bin.000011
-rw-r----- 1 yoku0825 yoku0825 48221936 Sep 6 12:44 bin.000012
-rw-r----- 1 yoku0825 yoku0825 86553 Sep 15 15:47 bin.000017
-rw-r----- 1 yoku0825 yoku0825 10626 Sep 20 16:30 bin.000024
-rw-r----- 1 yoku0825 yoku0825 169 Aug 22 14:26 relay.000001
-rw-r----- 1 yoku0825 yoku0825 209 Sep 12 13:16 bin.000015
-rw-r----- 1 yoku0825 yoku0825 227 Sep 19 20:49 bin.000022
大体残り50MBくらいかなあと。ディレクトリー階層があるところなら親ディレクトリーがどの場所に並んでて、そのディレクトリーの中でファイルが何番目に位置しているか…とか丁寧に調べれば大体今何%のところにあるかは出せるような気がする。
とはいえまあ pipe viewer 使えばいいよねとは思う。
$ tar -C /var/lib -c mysql | pv | pzstd -qc | aws s3 cp - s3://...
247MiB 0:00:04 [50.2MiB/s] [ <=>
pv
使うの忘れた時とかcronからキックされた時用かな。
0 件のコメント :
コメントを投稿