つよつよエンジニアになりたい

つよつよエンジニアになりたいエンジニアが日々の学びや気づきをアウトプットしていきます

Linuxのパーティション

LinuxではハードディスクやSSDなどのストレージをパーティションと呼ばれる「しきり」で分けている。windowsで言うところのドライブをCやDに分けているのと似ている。パーティションでハードディスクを複数の区画に分割することで独立して機能させることができる。

なぜパーティションで分けるのか

前述の通りハードディスクを分割することで独立した区画となり、ファイルシステムに一部障害が発生した際も被害を最小限に止めることができる。また、書き込みが多く容量を使うディレクトリをパーティションで分割することでディスク容量が不足してシステム全体が機能しなくなる事態を防ぐことができる。(ログの書き込みが頻繁に発生する/varディレクトリなど)

パーティションの種類

基本パーティション・拡張パーティション・論理パーティションの3種類がある。

基本パーティション

BIOSベースのシステムでは基本パーティションは4つまで作成可能。作成したパーティションの中にファイルシステムを作成することでデバイスにアクセスできる。ハードディスクが /dev/sda の場合、デバイス名は /dev/sda1 ~ /dev/sda4となる。

拡張パーティション

BIOSベースのシステムで使用される。基本パーティションの一つに作ることができる。拡張パーティションの中には後述する論理パーティションを複数作成することができる。

論理パーティション

BIOSベースのシステムで使用される。拡張パーティションの中に作成されるパーティション。作成するとデバイス名は /dev/sda5以降となる。

パーティションテーブル

パーティションの構成情報をOSに提供するプログラムのこと。ハードディスクごとに存在し、マスターブートレコードMBR)の一部。MBRはハードディスクの最初に読み込まれる場所に存在し、その中にはブートローダパーティションテーブルがある。

OSの起動とパーティションテーブル

PCの電源がオンになるとマザーボード上のBIOSが実行されハードウェアの初期化が行われる。その後のブートデバイス(一般的にはハードディスク)を認識する処理で先頭部分のMBRを読み込むことでMBRの中のブートローダパーティションテーブルのパーティション情報を把握し、パーティションの先頭セクタをロード・実行する。パーティションの先頭セクタにはブートセクタが存在し、ブートセクタのOS起動プログラムがOSを起動する。

文章だけだとわかりづらいため図を作成する予定。

参考

jp.minitool.com

Partition table definition by The Linux Information Project

8thway.cool.coocan.jp

CI/CDについて

「CIとCDってなんだっけ?」って聞かれた時に上手い説明ができないなと思ったので記事にしてまとめていきます。

CIとは?

Continuous Integrationの略で日本語では「継続的インテグレーション」と言います。

インテグレーションを訳すと「統合、統一、融合」といった意味を持ちます。継続的インテグレーションとはつまり、継続的に何かをまとめ上げてどこかに統合しようということです。ここでいう何かとは「コードの変更」のことで、どこかは「プロジェクト全体でコードを管理している場所(メインブランチとか)」です。ソフトウェア開発では開発者がプロジェクトのメインとなる場所からコードをコピーしてきてローカル環境で開発を行います。当然ローカルで開発を行えばメインのコードとは異なる部分が出てきます。最終的にその「コードの変更」をメインとなる場所にマージしてビルドしてテストして完了となります。この一連の流れを自動化する仕組みが継続的インテグレーションというわけです。

また、CIはエクストリーム・プログラミング(XP)のプラクティスとして確立

なぜCIを導入するのか?

一言で言うと、ソフトウェア開発の品質と生産性を向上するためです。

CIを導入することでビルドやテストを自動化してくれるため一日に多くのインテグレーションが可能になります。短い期間でインテグレーションが行われればその分変更箇所も減り、バグの早期発見にもつながります。

CDとは?

Continuous Delivery / Continuous Deploymentの略で日本語では「継続的デリバリ」「継続的デプロイ」と言います。この二つには明確な違いがあるようです。継続的デリバリはビルド、テスト、ステージング環境へのデプロイを自動化しますが、本番環境へのデプロイには明示的な承認が必要となります。一方で継続的デプロイにはその承認が不要で全てのテストに合格した段階で本番環境にもデプロイされます。

図にしてみました。

CI/CDイメージ図

AWS CodePipelineで言うと上司からの承認パイプラインをデプロイの前に組み込んで、承認されるとデプロイするのが継続的デリバリでそこから承認をなくすと継続的デプロイになるといった感じでしょうか。

CI/CDツール

CI/CDを実現するツールは大きく分けてオンプレミス型とクラウド型の2種類あります。オンプレミス型ではJenkins、クラウド型ではCircleCIが有名です。オンプレミス型では拡張性が高い、自前のサーバが必要といった特徴があり、クラウド型は拡張性には乏しいが自前でサーバを持つ必要がなく環境構築が容易という特徴があります。

※実際にJenkinsとCircleCIを触ったわけではないので間違った記述があるかもしれません。

オンプレミス型

  • Jenkins
  • Concourse CI

クラウド

  • CircleCI
  • Travis CI
  • Codeship
  • AWS CodePipeline
  • GCP Cloud Build

参考

つよつよエンジニアになりたい

最近エンジニアとしてのアウトプットが少なめだと感じたため日々の学びや気づきを記事にしていく。

学んでも学んでも知らないことが見つかるため楽しいのだが、それと同時に自分の無力さを実感する。 「こんなことも知らないのか」「こんなことも実装できないのか」と。 それを少しでも無くしたい。

実務で学んだことや気づいたこと、手を動かして作ったものの説明、本の感想など様々な学びのアウトプットをしていく。