データの運用の自分メモ。
ディスクのマウント
windowsホストにはドライブレターがあって、普通にディスク追加するとアルファベット順にドライブレターってのがつく。
自分はunix/linuxみたいにドライブレターなしで使ってる。
ハードウェアはだいたいこんな感じ。
+-pc-server------------+ | +----+ +----+ +----+ | +----+ | |ssd1| |ssd2| |hdd1| |--usb3--|hdd2| | +----+ +----+ +----+ | +----+ +----------------------+
Cドライブは2020年からm.2のドライブ。
vmwareとかdocker使う時にめっちゃ体感速度上がる。
ゲーム用のマシンもスイスイ動く。
sataとusbはバックアップ置き場やったり、普通のドキュメント類置き場。
cドライブはいちばん速いssdにしてて、他の3つはディレクトリを作っとく。
c:¥ ★ m.2接続のディスク c:¥nari¥SSD-Docker ★ m.2接続のディスク用のディレクトリ c:¥data¥hdd01 ★sata接続のディスク用のディレクトリ c:¥data¥hdd02 ★ usb接続のディスク用のディレクトリ
windows11/2019の「コンピュータの管理」をスタートボタン右クリックして表示させたら、その中に「ディスクの管理」がある。
ここでディスクレイアウト表示を右クリックしたら「ドライブ文字とパスの変更」ってのが出てくる。
既にデータが入ってても変更はできるから、用意したフォルダを指定する。
ドライブ文字を割り当てず、NTFSフォルダにマウントすればいい。
自分の場合はdocker用のvmdk置き場に2つ目のssdを使ってる。
同じやり方でsata接続・usb接続のhddをマウントポイントに割り当てる。
sambaでファイル共有
マウントポイント利用するとディレクトリに割り当てられる。
+-pc-server----------------------------+ | +--------+ +-----------------------+ | | |ssd1⇨c:¥| |ssd2⇨c:¥nari¥SSD-Docker| | | +--------+ +-----------------------+ | | +-------------------+ | | |hdd1→c:¥data¥hdd01 | | | +-------------------+ | +--------------------------------------+ | +-------------------+ |--usb3--| hdd2→c:¥data¥hdd02| +-------------------+
理由はよう知らんけど、ssdを2つつけたら、1個目より2個目のほうが遅い。
linuxホストのルートパーティションをc:¥のどこかに作っておき、dockerコンテナ用のパーティションは2個目のssd使わせる。データと倉庫のパーティションは2つあるhddに作る。
c:¥ ★ linux.vmx, linux.vmdk c:¥nari¥SSD-Docker ★ docker.vmdk c:¥data¥hdd01 ★ samba.vmdk c:¥data¥hdd02 ★ warehouse.vmdk
linuxでdfするとこんな感じ。
nari@nafslinux-ubu22:~$ df -h | egrep 'sd|root' /dev/mapper/vgubuntu-root 195G 15G 171G 8% / /dev/sda2 512M 5.3M 507M 2% /boot/efi /dev/sdb 629G 113G 485G 19% /docker /dev/sdc 5.9T 2.4T 3.2T 43% /samba /dev/sdd 5.9T 2.4T 3.2T 43% /warehouse nari@nafslinux-ubu22:~$
linux側で/sambaをsambaで共有しといたら、windowsからドライブ接続して使う。
/dockerと/sambaはrsyncで月〜金曜日に/warehouseの中のバックアップ置き場にバックアップする。
rsyncしてるところの抜粋。
dockerのコンテナ停止してアプリケーションとかデータベースのエンジン止めてからやってる。
# stop&reflesh docker containers-------------------------------------------- docker system prune -f --volumes /bin/sh /gvis/script/301_dockerStop.sh # backup docker data ------------------------------------------------------- rsync -av --delete --exclude='nariDockerSys/' \ --exclude='nariDockerDat/_tmp/' \ --exclude='.recycle' \ --exclude='lost+found' \ ${SRC_ROOT1}/ ${BACKUP_DKDR} >> ${LOG_FILE}
nariDockerSysはコンテナとイメージが入ってるからバックアップから除外。
他にもテンポラリ置き場、ゴミ箱、ext3が作るフォルダも除外。
rsyncは差分コピーするから、2.4TBほどあるデータ全部は書かないし15分程度でいつも処理完了する。
実際は後のほうでクラウドに同期するデータ向けのtarとzipやってる。
zipだけやと復元したときに所有権情報が崩れるから、tarしてからzip。
tarはcpuコアを複数使うオプションつけるように変えた。
zipにはパスワードをつけて、クラウド内でも普通には読めないようにしてる。
### tar czf `basename ${BACKUP_DKDR}`.tar.gz `basename ${BACKUP_DKDR}` >> ${LOG_FILE} tar -I pigz -cf `basename ${BACKUP_DKDR}`.tar.gz `basename ${BACKUP_DKDR}` >> ${LOG_FILE} zip -r -P $1 `basename ${BACKUP_DKDR}`.zip `basename ${BACKUP_DKDR}`.tar.gz >> ${LOG_FILE} mv `basename ${BACKUP_DKDR}`.zip ${BACKUP_ROOT} rm -f `basename ${BACKUP_DKDR}`.tar.gz
/warehouseは必要な箇所をrcloneでクラウドに同期してバックアップする。
これでローカルディスクにあるデータをオブジェクトストレージに同期コピーしてくれる。rsyncより時間少しかかるけど、それでも30分以内で毎日処理完了する。
ドライブ接続
コマンドラインで例えばxドライブ接続するなら、
net use x: "\\naFSlinux.intra.gavann-it.com\samba" (パスワード) /user:(ユーザ)
コマンドラインでドライブ接続を切る時は、
net use /delete /y x:
何も考えずにドライブ接続を全部切るときは、
net use /delete /y *
macでやるとき、コマンドラインあるんかもしれんけど、guiで「サーバ接続」からいく。
1回接続すると設定覚えててくれて認証もキーチェーンに入るからコマンドライン探したことない。
たぶんmount使えばええはずやけど、楽なほう使いたいからやってへん。
ディスク交換するとき
ディスク交換するときってのは、データが溢れそうで容量増やしたいときとか、ホンマに壊れた時。
壊れてなくても予防保守で7〜8年でディスク交換しとく。
年数の根拠は特にないけど、ディスクの利用率が75%超えそうになったら、壊れてなくても替える。
自分の運用なら、バックアップ取ってからサーバの電源落としてディスク交換し、バックアップからリストアしたら交換終わる。
使い終わったディスクは、完全初期化してからrakumaとかで売る。
いっつも外してから「あー、crystalDiskinfoやるの忘れた」ってなる。
ドライブレターなしを何に使うか
業務で昔考えてみたことがある。
たとえば、バックアップを30日間毎日やりたいとき、5つのusb接続した物理ディスクに6個ずつ30個のディスク領域を用意する。
ドライブレターはAからZまでのアルファベット26個までしかないから、30個の領域は扱えない。
ドライブレターなしでディレクトリにマウントすると、30個でもそれ以上でも扱えることになるし、番号で書いておくことでバックアップスクリプトに繰り返し処理を入れとくことでハードコードしなくてすむ。
c:¥backup¥generation01 c:¥backup¥generation02 :(中略) c:¥backup¥generation29 c:¥backup¥generation30
ハードディスクの種類
hddとかssdってのは水もので、壊れるときはすぐ壊れる。
そうかといって、5年以上無事に動いてくれるときもあるし、いきなりドカンと壊れてまうこともある。
事故にあわないために、バックアップのスクリプトを書いておいて、タスクスケジューラとかcrontabにバックアップ処理呼び出しを設定しとく。
今はクラウド全盛やから、普通のディスクだけじゃなくtar/zipで圧縮したファイルをcyberduckとかrcloneとかでgoogle driveとかaws s3のオブジェクトストレージへ保管したらめっちゃ安全。
ドライブレターはいつから
大昔、まだハードディスクがあんまり普及してない頃、フロッピードライブを使ってた。
wikiにあるめっちゃ懐かしいpc9801。
5Mhzの8086動いてたんやなぁ。
自分はrx21が初めて買ったpc9801やったから80286やったっけ。
右側にフロッピードライブが2つある。
独特の音を立てて、Aドライブ、Bドライブって使ってた。
ゲームやったらゲーム本体のフロッピーと、データ保存のフロッピーを同時に使う。
プログラム書く時やったら、コンパイラのフロッピーと、ソースの入ったフロッピーを同時に使う。
ここにハードディスク増強したら、Aドライブ、Bドライブの次なのでCドライブになる。これが今でもそのまま使われてるんやなぁ。
それでフロッピーは廃れたから、Cドライブだけが残ってしもた。
cd/dvd/sdカード/usbメモリ/ブルーレイとか使うとそれぞれドライブが増えてく。
もうどれも使わんけど、クラウドのドライブをマウントできるソフトウェアもある。
pc9801が全盛やった頃、unix/linuxは職場にしかなかった。
しかも既にハードディスクがモリモリ動いてた。
フロッピーをマウントしたことないけど、/dev/fdとかにマウントされてたんかなぁ。
ハードディスクは高価で持ち運びも重たかったから、メモリをディスクに見立てるramdiskなんてのを使ってたこともあったよなぁ。
ntfsは性能が下がっていく
ディスクにはファイルシステムってのを使う。
dosとwindows95/98の頃にはfat、windowsNTと2000の頃にはntfs使ってた。
ntfsはバージョンあるけど、今のwindows11/2022でも使ってる。
長生きなファイルシステムやけど、権限設定が細かすぎるのもあって使いにくい。
unix/linuxみたいに読み書き実行の3つでええのに。
大きなファイル入れて削除すると、そこに穴が開く。
次のファイルを書き足すとき、その穴に入りきれないデータのときは別の空き領域を使う。
これを繰り返すと、断片化が発生してデータの置き場がつぎはぎだらけみたいになってしまい、データの読み書きに時間がかかるようになる。
windows98の頃はそんなことがよくあったなぁ。
winddowsNTとかwindows2000のときも同じ。
デュアルブートにしたノートpcにturbolinux入れて使ってたら、あんまり体感速度は下がらんかった。
ノートpcにはntfsでwindowsNT、fat32でデータ領域、ext2でturbolinuxって分けてたら、fat32の領域をwindowsとlinuxどっちからも読めるようにしてて、fat32は数年使うとやっぱり遅い気がした。
具体的に性能測ったわけやないけど、ntfsよりもext2(違ったか?)のほうが性能よかったんとちゃうかなぁ。
あるんかどうか知らんけど、ext2/ext3/xfs/zfsで断片化なんて聞いたことない。
ファイルシステムとは違うけど、古いoracleにも断片化ってあったな。
解消するときはデータ領域のフルエクスポートとフルインポートせなあかんかったっけ。