WSL2を活用し大きめ情報を小さくして受け渡しの話
はじめに
にて
devc_rhel フォルダを丸ごと
他人に渡す必要があった。
しかし、devc_rhel フォルダが1.97GBと大きめサイズのため
ファイルサーバーに置きにくい
はて、さて、どうしたものかぁ。
と思ってたら、うまいやり方見つけました
これまでだと、何かWindowsアプリでいい圧縮/解凍 関係のアプリがないかな。
みたいな発想でした。
WSL2があればLinuxコマンドが使えるわけですし、WSL2とWindowsの領域の
両方に読み書きできるわけですから、当記事のような、うまい方法が見つけやすいのです。
ですので、
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
★ WSL2が使える時代においては、
★ Linuxコマンドが使えるわけですし、WSL2とWindowsの領域の読み書きできる前提で
★ 方法を考えるという発想で、何事も、物事考えればよろしいというわけです
★ 今後は、この発想で思考することにしました。
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
★ 実際、
★ 約5%(20分の1)での圧縮させる方法がありました。
★
★ それをファイルサーバー経由で受け渡しすればいいのです。
今後、このようなサイズが大きくて、ファイルサーバーに置きにくいし
受け渡しが、メンドイなぁという機会がありましたら。
この記事の内容を読んで、コピペ作業をすれば、楽ちんだと思いました。
また、このノウハウ自体を、受け渡しの相手に説明するのも、メンドイわけですから
それも、この記事、読んで!!
で、終わる話で、楽ちん ( 説明するのメンドイわけですから )
それを、今後していけるように、当記事を書くことにしました。
データを渡す法 ( 圧縮して小さくする側 )
での、
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