😎

WSL2を活用し大きめ情報を小さくして受け渡しの話

に公開

はじめに

https://zenn.dev/tazzae999jp/articles/b166b7fd73b3bf
にて
devc_rhel フォルダを丸ごと
他人に渡す必要があった。
しかし、devc_rhel フォルダが1.97GBと大きめサイズのため
ファイルサーバーに置きにくい

はて、さて、どうしたものかぁ。

と思ってたら、うまいやり方見つけました

これまでだと、何かWindowsアプリでいい圧縮/解凍 関係のアプリがないかな。
みたいな発想でした。

WSL2があればLinuxコマンドが使えるわけですし、WSL2とWindowsの領域の
両方に読み書きできるわけですから、当記事のような、うまい方法が見つけやすいのです。

ですので、
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
★ WSL2が使える時代においては、
★ Linuxコマンドが使えるわけですし、WSL2とWindowsの領域の読み書きできる前提で
★ 方法を考えるという発想で、何事も、物事考えればよろしいというわけです
★ 今後は、この発想で思考することにしました。
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★

★ 実際、
★ 約5%(20分の1)での圧縮させる方法がありました。
★
★ それをファイルサーバー経由で受け渡しすればいいのです。

今後、このようなサイズが大きくて、ファイルサーバーに置きにくいし
受け渡しが、メンドイなぁという機会がありましたら。

この記事の内容を読んで、コピペ作業をすれば、楽ちんだと思いました。
また、このノウハウ自体を、受け渡しの相手に説明するのも、メンドイわけですから
それも、この記事、読んで!!
で、終わる話で、楽ちん ( 説明するのメンドイわけですから )

それを、今後していけるように、当記事を書くことにしました。

データを渡す法 ( 圧縮して小さくする側 )

https://zenn.dev/tazzae999jp/articles/b166b7fd73b3bf
での、
devc_rhel フォルダですけど

位置関係が、
/myDocker/devc_rhel
の状況だったので

/myDocker
にて、

sudo tar -cpf ./devc_rhel.tar --numeric-owner ./devc_rhel

をすることに、一旦は、考えましたが、サイズも大きいため、
ext4.vhdxのフラグメンテーションによるサイズ膨張が嫌でした
なので、コマンド自体はWSL2のUbuntuのターミナル上で実行しますが
出力先は、C:\tempにしました。
( ext4からNTFSへの出力でちょっと余計に時間かかるけど )

sudo tar -cpf /mnt/c/temp/devc_rhel.tar --numeric-owner ./devc_rhel

を実行し、C:\temp フォルダへ出力しました。
C:\temp\devc_rhel.tar
の位置関係で出力されました。

ここで、
--numeric-owner は、ファイルや、フォルダの所有者をUID, GIDの数値で保存するという意味です
送り主と、受け側では、初期の作業ユーザ名は異なると思いますが
Ubuntuでは、初期ユーザはだいたい、UID, GIDは、1000:1000となってますので
ユーザ名こそ違えど、所有者やパーミッションは、
--numeric-owner で同内容の状況で引き継ぐ形で相手に渡せたりするのです

補足)
*.tarを作るときのコマンドラインでは、上記の「./devc_rhel」のように
相対パスを指定してやるべきです!!!
*.tarファイルは、相対パスで作成したか、絶対パスで作成したか
内部的に記憶してます。

復元時は、.tarの内部記憶が、相対パスならば、カレントディレクトリからの相対パスで復元して
意図通り、復元しやすく安全です
これが、
.tarの内部記憶が、絶対パスならば、
その絶対パスでの復元になってしまい、意図しないエリアを上書きしてしまいます。

Windowsアプリなどで*.tarを作るアプリは、相対パス方式で実装されていたりする
でしょうけど。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★ 上記のようにUnix/Linux環境で自分でコマンドラインを
★ 打ち込んで*.tarを作るときは、相対パス指定にしておくことは鉄則です!!!
★ これは本当に、重要な注意事項なので、心得ておくべきことです!!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

この devc_rhel.tar が1.97GBありますが

zstd -19 -T0 devc_rhel.tar

を実行で約5%(20分の1)に小さくできます。

ext4.vhdxのフラグメンテーションによるサイズ膨張が嫌で、
C:\temp\devc_rhel.tar
の位置関係で出力していたため、
実際には、今回、

zstd -19 -T0 /mnt/c/temp/devc_rhel.tar

をしました。

補足)
もし、zstdのコマンドが無いと言われて怒られる場合は、
sudo apt update
sudo apt install zstd
でインストールしてもらって
その後、
which zstd
でzstdコマンドがあることを確認したうえで、リトライすればよい

devc_rhel.tar.zst
が出力されました
サイズが107MBでした。

なんと、約5%(20分の1)になりました。

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
フォルダ配下末端まで、圧縮したtarファイルで、
中身がソースコードなどのテキスト情報が中心のものだった場合の
今回の状況だと、約5%(20分の1)のレベルにまで圧縮される
ということがわかりました。

zstd -19 -T0 devc_rhel.tar
の方式は、サイズが大きければ大きいほど圧縮率が高くなるとのことです。
( サイズが大きければ大きいほど、完了するまで時間はかかりますけど )

今回の1.98GB → 107MBでは、5分ぐらいの放置で終わりました

数十メガレベルの小さなものを圧縮しようとすると、すぐ終わりますけど
90%ぐらいのサイズのものが出力され、あまり圧縮率は高くないです。

今回の1.98GB → 107MB のようなケースでは、役に立ちます。
今回のように、テキスト中心をtarで固めたものを対象にしたときのほうが
圧縮率は高いようです。バイナリ系はあまり圧縮率は高くないかもしれません。

おそらく、似たようなケースは、今後も、あるでしょうから、
この記事の情報をコピペ編集で作業すれば、簡単に受け渡しできるでしょう。
この記事のURLを受け渡し、相手に送っとけば、メンドイ説明も、省略できるでしょう
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

それから、

/myDocker/devc_rhel
で、
tree -a . > tree_dat_kotira
しました

補足)
もし、treeのコマンドが無いと言われて怒られる場合は、
sudo apt update
sudo apt install -y tree
でインストールしてもらって
その後、
which tree
でtreeコマンドがあることを確認したうえで、リトライすればよい

上記、
devc_rhel.tar.zst
tree_dat_kotira
をファイルサーバーのとある場所に、置いて

受け取り側の相手に連絡しました。

データを受け取って復元する側

/myDocker/devc_rhel

の位置関係にて、

送り主と全く同じ
devc_rhel フォルダを復元したいとしましょう

まず、
/myDocker
などで、
すでに、devc_rhel フォルダがあれば、どかす

mv devc_rhel devc_rhel_bak
でのリネームによって、どかす のでもよいでしょう。

/myDocker
にて、
explorer.exe .
で、エクスプローラーを開いて
受け取った
devc_rhel.tar.zst
を置く

/myDocker
にて、
ターミナルでlsで、
devc_rhel.tar.zst
があることを確認したうえで

zstd -d devc_rhel.tar.zst

をする。

補足)
もし、zstdのコマンドが無いと言われて怒られる場合は、
sudo apt update
sudo apt install zstd
でインストールしてもらって
その後、
which zstd
でzstdコマンドがあることを確認したうえで、リトライすればよい

devc_rhel.tar
ファイルが出力される

その後、

sudo tar -xpf ./devc_rhel.tar --same-owner

を実行する。

/myDocker/devc_rhel

の位置関係にて、

送り主と全く同じ
devc_rhel フォルダを復元される

本当に、送り主のものと一致してるかの確認ですが

cd devc_rhel
で、
/myDocker/devc_rhel

に移動したうえで

tree -a . > tree_dat
しました

補足)
もし、treeのコマンドが無いと言われて怒られる場合は、
sudo apt update
sudo apt install -y tree
でインストールしてもらって
その後、
which tree
でtreeコマンドがあることを確認したうえで、リトライすればよい

explorer.exe .
で、エクスプローラを起動し、
送り主から受け取った
tree_dat_kotira を置く

その後、

/myDocker/devc_rhel
で、ターミナルにて

diff tree_dat tree_dat_kotira

を実行し、差分がなければ、送り主と完全一致した
devc_rhel フォルダを復元できたと言える

あとは、
/myDocker/devc_rhel
で、
rm tree_dat
rm tree_dat_kotir
で要らないものを消して

/myDocker
で、
rm devc_rhel.tar.zst
rm devc_rhel.tar
で要らないものを消せば

作業完了。

以上

Discussion