経緯
メイン機として使っているノートPCのメインディスプレイが壊れてから早半年,とりあえずポータブルのサブディスプレイをつないで使っていました. が,先日HDMI端子からの出力が一瞬出来なかったので本格的にやばくなってきました.
親からは夏休みに買ってほとんど使ってないPCを譲ってくれるとは言ってくれましたが,PCがいつ壊れるかわからないし夏休みまで持ったとして環境をプレーンなOSから1から構築するのも絶対にいやなのでひとまずddでディスクイメージをimg化することにします.
閲覧上の注意
この記事はとある合格発表の前日の記事となるため,テンションが異常です.ご閲覧時はご注意下さい.
やったこと
1. AWSアカウントの取得
省略.普通に登録してついでにS3のGracierバケットも作っておきました.
私はクレカを持っていないので,手持ちのKyashに1,000円以上のチャージがあるかも確認しておきます.
2. 現在のディスクの使用状況
fdisk -l
で確認.
┌──[~]
└(ノ≧∇≦)ノ $ sudo fdisk -l | grep sda
[sudo] kaniyama のパスワード:
ディスク /dev/sda: 447.13 GiB, 480103981056 バイト, 937703088 セクタ
/dev/sda1 34 1048575 1048542 512M EFI システム
/dev/sda2 1048576 667942911 666894336 318G Linux root (x86-64)
/dev/sda3 667942912 670040063 2097152 1G Linux ファイルシステム
/dev/sda4 670040064 670072831 32768 16M Microsoft 予約領域
/dev/sda5 670072832 937701375 267628544 127.6G Microsoft 基本データ
Windowsのパーティション飛ばして保存領域にすれば,3~4分割位でimg化出来ることを確認. 我がマシンのWindowsは我ながら不遇だとは思ってます(ゲーム用にしか使われてないので).
3. AWSへアップロードする準備
ddは無論archlinuxのインストールメディアあたりから行うので,AWSにアップロードする方法を確認します.
AWS-cliがpacmanにあるとは思わなんだ...これは楽勝っぽいぞ
試しにメイン機に入れてみます
エラー: python-botocore: "Jonathan Steel <mail@jsteel.org>" の署名は無効です
:: ファイル /var/cache/pacman/pkg/python-botocore-1.20.88-1-any.pkg.tar.zst は破損しています (無効または破損したパッケージ (PGP 鍵))。
ファイルを削除しますか? [Y/n] y
エラー: aws-cli: "Jonathan Steel <mail@jsteel.org>" の署名は無効です
:: ファイル /var/cache/pacman/pkg/aws-cli-1.19.88-1-any.pkg.tar.zst は破損しています (無効または破損したパッケージ (PGP 鍵))。
ファイルを削除しますか? [Y/n] y
エラー: 処理を完了できませんでした (無効または破損したパッケージ (PGP 鍵))
エラーが発生したため、パッケージは更新されませんでした。
あらぁ...正直私linuxにおけるパッケージの署名って概念がよくわかってないんですよね...
本家レポジトリによるとpipでのインストールが一番やぞと教えてくれたので,大人しくpipでインストールすることにします.
がなんかdocutilsがpip上でアンインストール出来ないと怒られる?
...ああなるほど,pacmanでインストールされてるんスね...
┌──[~]
└(ノ≧∇≦)ノ $ sudo pacman -Qs docutils
local/python-docutils 0.16-4
Set of tools for processing plaintext docs into formats such as HTML, XML,
or LaTeX
┌──[~]
└(ノ≧∇≦)ノ $ sudo pacman -R python-docutils
依存関係を確認しています...
エラー: 処理の準備に失敗しました (依存関係を解決できませんでした)
:: python-docutils を削除すると 'python-docutils' が破壊され python-sphinx の依存関係が壊れます
┌──[~]
└(ノ≧∇≦)ノ $ sudo pacman -R python-sphinx python-docutils
依存関係を確認しています...
パッケージ (1) python-sphinx-4.0.2-1 python-docutils-0.16-4
合計削除容量: 14.27 MiB
:: 以上のパッケージを削除しますか? [Y/n]
消してからのインストール...お?
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
cephfs-shell 0.0.1 requires cmd2, which is not installed.
tmuxp 1.7.2 requires click<8,>=7, but you have click 8.0.1 which is incompatible.
Successfully installed awscli-1.19.95 colorama-0.4.3 docutils-0.15.2
┌──[~]
└(ノ≧∇≦)ノ $ aws
Note: AWS CLI version 2, the latest major version of the AWS CLI, is now stable and recommended for general use. For more information, see the AWS CLI version 2 installation instructions at: https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
aws: error: the following arguments are required: command
まあなんか,入ったっぽいのでヨシ.と思ったけどaws cli v2を使えと申すか...
レポジトリ見てみるとv2用ブランチがあるようですが,別にgit clone してビルドとか絶対に嫌なので見なかったことにします.
それよりもアップロードに必要な認証情報は...
AWS_ACCESS_KEY_ID
とAWS_SECRET_ACCESS_KEY
が必要なんですね.なるほど.
確かバケットのURLも必要だったはずなので,AWSのコンソールから取得すれば良いのは
- ルートアカウントの
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
- S3 Gracierの
ボールト ARN
かな.
おっけい,ひとまずコイツらメモりますか.
4. imgを4分割で取ってくるときの手順の確認
ddコマンド、最初中学生のころくらいは「めっちゃ取っつきにくいし怖いコマンド!」位の印象しかなかったんですが、よくよく調べたらシンプルで超簡単ですね...
今回はtmp用ディレクトリ(旧Windowsディレクトリ)が100GBしかないので、100GB単位での切り出しをします。
その場合、各ケースにてddによるファイル出力の開始位置をそれぞれ100GBずつずらす必要があるのですが...
dd if=/dev/sda2 of=/mnt/1.dump bs=100GB count=1
dd if=/dev/sda2 of=/mnt/2.dump bs=100GB count=1 skip=100GB
dd if=/dev/sda2 of=/mnt/3.dump bs=100GB count=1 skip=200GB
dd if=/dev/sda2 of=/mnt/4.dump bs=100GB count=1 skip=300GB
これでいい模様。マジか。
統合はseekでずらしながらマージすればOK。マジか。
というかなんかcatでくっ付けてもいいみたいですが。マジか。
これは流石に不安しか覚えないしコマンドおかしいしって感じではありますが、とりあえずddで分けても元のディスクイメージに戻ることは確認できたのでヨシ!
で、dd
しながら圧縮することもできるみたいなので、圧縮する方針で頑張ります。
dd if=/dev/sda2 bs=100GB count=1 | gzip -c > img-210616-1.gz
dd if=/dev/sda2 bs=100GB count=1 skip=100GB | gzip -c > img-210616-2.gz
dd if=/dev/sda2 bs=100GB count=1 skip=200GB | gzip -c > img-210616-3.gz
dd if=/dev/sda2 bs=100GB count=1 skip=300GB | gzip -c > img-210616-4.gz
5. AWS S3 Gracierのアップロード手順の確認
- upload-archive — AWS CLI 1.19.95 Command Reference
- upload-multipart-part — AWS CLI 1.19.95 Command Reference
なんか2つコマンドあるけど、確か前者でマルチパート勝手に切り分けてくれる的なことどこかに書いてあった気がする。ので前者のコマンドを使ってみることにします。
ドキュメントには自動で切り分けるよとは一言も書いてなかったけどなんとかなるやろ()
aws glacier upload-archive --account-id - --vault-name my-vault --body archive.zip
or
aws glacier upload-multipart-part --body part1 --account-id - --vault-name my-vault --upload-id 19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ
6. 実験データ等ヤバそうなやつだけ先にgitに飛ばす
このステップは大事.
┌──[~]
└(ノ≧∇≦)ノ $ cd d/kosen_engineeringExperience2/202004_VHDL/
┌──[~/d/kosen_engineeringExperience2/202004_VHDL]
└(ノ≧∇≦)ノ $ git add .
┌──[~/d/kosen_engineeringExperience2/202004_VHDL]
└(ノ≧∇≦)ノ $ git commit -m "現在までの進捗"
[master 53466ae] 現在までの進捗
99 files changed, 3038 insertions(+), 2990 deletions(-)
---略---
┌──[~/d/kosen_engineeringExperience2/202004_VHDL]
└(ノ≧∇≦)ノ $ git push origin master
Enter passphrase for key '/home/kaniyama/.ssh/github_id_rsa':
Enter passphrase for key '/home/kaniyama/.ssh/github_id_rsa':
Enter passphrase for key '/home/kaniyama/.ssh/github_id_rsa':
Enumerating objects: 210, done.
Counting objects: 100% (210/210), done.
Delta compression using up to 8 threads
Compressing objects: 100% (108/108), done.
Writing objects: 100% (110/110), 5.74 MiB | 335.00 KiB/s, done.
Total 110 (delta 45), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (45/45), completed with 43 local objects.
To github.com:Kaniyama-t/kosen_engineering-experience2.git
d31bcdc..53466ae master -> master
午後の授業で使うので,その間は学校のPCを使うため一旦アップロード.
...というかメイン機でずっと実験してたにしてもせめてもう少しこまめにgit commit するべきだったな...
99ファイルは色んな意味で笑えん,,,
6. 研究室でddスタート
archlinuxのインストールメディアを準備して、いざddします。
手順は
loadkeys jp106
するmkfs.ext4 /dev/sda4
するmount /mnt /dev/sda4
iwctl
でネットにつなぐpacman -S python
するpython -m pip install awscli
するdd
でファイル出力aws glacier
コマンドでネットの海に飛ばす.- 7-8を4回繰り返す
- 終わり!