2015年5月18日

RHEL7でスナップショットとり放題設定をためしたメモ

インストール

RHEL7のインストーラではインストール対象としてLVM thinprovisioningが選択できるようになっている。ここを選択して、適当に空きが残るように容量を設定しておく。

状態を確認

操作する前に現在の状態を確認

[root@localhost log]# lsblk
NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                       8:0    0   20G  0 disk 
├─sda1                    8:1    0  500M  0 part /boot
└─sda2                    8:2    0 16.4G  0 part 
  ├─rhel-swap           253:0    0    2G  0 lvm  [SWAP]
  ├─rhel-pool00_tmeta   253:1    0   12M  0 lvm  
  │ └─rhel-pool00-tpool 253:3    0   12G  0 lvm  
  │   ├─rhel-root       253:4    0   12G  0 lvm  /
  │   └─rhel-pool00     253:5    0   12G  0 lvm  
  └─rhel-pool00_tdata   253:2    0   12G  0 lvm  
    └─rhel-pool00-tpool 253:3    0   12G  0 lvm  
      ├─rhel-root       253:4    0   12G  0 lvm  /
      └─rhel-pool00     253:5    0   12G  0 lvm  
sr0                      11:0    1  3.6G  0 rom  

[root@localhost log]# lvs
  LV     VG   Attr       LSize  Pool   Origin Data%  Meta%  Move Log Cpy%Sync Convert
  pool00 rhel twi-aotz-- 12.00g               9.38   5.18                            
  root   rhel Vwi-aotz-- 12.00g pool00        9.38                                   
  swap   rhel -wi-ao----  2.00g
lsblkに同じエントリが2回でているのが不安ですが、tmetaの方はメタデータ、tdataの方は実際のデータがはいっています。
12GBのpool00の下に12GBということになっているrootが含まれている状態。
プールの詳細
[root@localhost log]# lvdisplay /dev/rhel/pool00 
  --- Logical volume ---
  LV Name                pool00
  VG Name                rhel
  LV UUID                vuooGK-VHow-JfAo-cPQb-Egf1-fCk4-qRpLqK
  LV Write Access        read/write
  LV Creation host, time localhost, 2015-05-15 19:15:03 +0900
  LV Pool metadata       pool00_tmeta
  LV Pool data           pool00_tdata
  LV Status              available
  # open                 2
  LV Size                12.00 GiB
  Allocated pool data    9.38%
  Allocated metadata     5.18%
  Current LE             3072
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
これで、lvmにより任意のタイミングでsnapshotをとり放題です。以下のようなコマンドでスナップショットを作成できます。

lvcreate --permission r --snapshot --name snapshot  rhel/root

snapper設定の作成

さて、snapshot作り放題、なのはいいですがlvcreateで都度作成するのはしんどいです。というわけでRHEL7には、SUSE出身のsnapperが含まれています。SUSEだとYaSTと連携してGUIまでありますが、RHELだとコマンドラインのみ。しかしとても便利です。
まずは設定を作成します。デフォルトだと “root” という名前の設定で、それ以外だと-c “設定名” みたいなオプションをつけて実行することでどこの操作をしているか指定します。
[root@localhost ~]# snapper create-config -f 'lvm(xfs)' /
このコマンドで /etc/snapper/configs/rootに設定本体が作成され、
さらに設定一覧が /etc/sysconfig/snapper にあるのでここに設定名が追加されます。
今の設定一覧を確認する。”root”設定があるのがわかります。
[root@localhost log]# snapper list-configs
Config | Subvolume
-------+----------
root   | /

snapshot作成

ここまで準備をするとスナップショットの作成は簡単。snapper createコマンドだけです。

[root@localhost log]# snapper create
様子を確認します。

[root@localhost log]# snapper list
Type   | # | Pre # | Date                     | User | Cleanup | Description | Userdata
-------+---+-------+--------------------------+------+---------+-------------+---------
single | 0 |       |                          | root |         | current     |         
single | 9 |       | Mon May 18 18:15:10 2015 | root |         |             |         

[root@localhost log]# lvs
  LV             VG   Attr       LSize  Pool   Origin Data%  Meta%  Move Log Cpy%Sync Convert
  pool00         rhel twi-aotz-- 12.00g               10.00  5.73                            
  root           rhel Vwi-aotz-- 12.00g pool00        10.00                                  
  root-snapshot9 rhel Vri---tz-k 12.00g pool00 root                                          
  swap           rhel -wi-ao----  2.00g
root-snapshot9 という名前のスナップショットが作成されています。

スナップショットのマウント

以下のようにスナップショット番号を指定して、readonlyでmountすることができます。
.snapshotディレクトリ以下に適当にmountされます。

[root@localhost ~]# snapper mount 10 

[root@localhost ~]# df

Filesystem                        1K-blocks    Used Available Use% Mounted on
/dev/mapper/rhel-root              12571648 1226516  11345132  10% /
devtmpfs                            1931348       0   1931348   0% /dev
tmpfs                               1941204       0   1941204   0% /dev/shm
tmpfs                               1941204    8580   1932624   1% /run
tmpfs                               1941204       0   1941204   0% /sys/fs/cgroup
/dev/sda1                            508588  168516    340072  34% /boot
/dev/mapper/rhel-root--snapshot10  12571648 1193528  11378120  10% /.snapshots/10/snapshot

snapshot間の差分

snapperではsnapshotを一時的なディレクトリにmountして、差分を取る仕組みがあります。
さらに通常のスナップショットの他に、管理に便利なようにpreとpostというタイプが導入されています。スナップショット自体は同じなのですが、なんらかの作業前にpreスナップショットを取得、作業後にpostスナップショットを取得してペアにしています。
今回は触れませんが、pre,postのスナップショットを各種の作業前後に自動的に作成して、特に差分がなければ自動的に消す仕組みも含まれています。
preスナップショット作成

[root@localhost ~]# snapper create -t pre
適当にファイル変更

[root@localhost ~]# ls
anaconda-ks.cfg  hoge  lvmdump-localhost.localdomain-20150515103428.tgz
[root@localhost ~]# rm hoge 
rm: remove regular empty file ‘hoge’? y
postスナップショット作成

[root@localhost ~]# snapper list
Type   | #  | Pre # | Date                     | User | Cleanup | Description | Userdata
-------+----+-------+--------------------------+------+---------+-------------+---------
single | 0  |       |                          | root |         | current     |         
single | 9  |       | Mon May 18 18:15:10 2015 | root |         |             |         
pre    | 10 |       | Mon May 18 18:18:32 2015 | root |         |             |         
[root@localhost ~]# snapper create -t post --pre-number=10
[root@localhost ~]# snapper list
Type   | #  | Pre # | Date                     | User | Cleanup | Description | Userdata
-------+----+-------+--------------------------+------+---------+-------------+---------
single | 0  |       |                          | root |         | current     |         
single | 9  |       | Mon May 18 18:15:10 2015 | root |         |             |         
pre    | 10 |       | Mon May 18 18:18:32 2015 | root |         |             |         
post   | 11 | 10    | Mon May 18 18:19:42 2015 | root |         |             |
差分の確認

[root@localhost ~]# snapper status 10..11
-..... /root/hoge
c..... /var/log/messages
c..... /var/log/snapper.log

差分対象の制限(フィルタ)

hogeファイルが消えているのと、/var/log以下のログが増えていることがわかります。
ログの差分をとってもあまり嬉しくないので、/etc/snapper/filters/ に、log.txtという名前で以下のようなファイルを作成します。このパターンにマッチするものは差分チェックの対象になりません。
差分対象の制限

/var/log/*
差分の確認ふたたび

[root@localhost ~]# snapper status 10..11
-..... /root/hoge

undo

差分がとれるので、patchコマンドの要領でundoができます。
ただこのundoをした時に一貫性があるのか、もろもろ大丈夫なのかなどは特に保証されていませんので注意が必要です。

[root@localhost ~]# snapper undochange 10..11 
create:1 modify:0 delete:0

TODO

snapperにはこの他にも定期的にsnapshotをとっておいて、過去数回分を残しておくなどかなり気のきいた機能があります。 裏で古いスナップショットを自動で消したり差分をしらべたりするので勝手に動くのが嫌なひとはオプションしらべてね(丸投げ)!
​

2015年5月7日

Identity Manager (IdM)とは?


Red Hat Enterprise Linux に付属するID管理ソフトウェアです。upstreamはfreeipaです。

できること:

  • Red Hat Enterprise Linux上でのユーザ、ホスト、サービスの認証をおこないます
  • 一般的なプロトコル(LDAP, Kerberos)を利用しているので他社製品での認証にも利用できます
  • 認証, sudo, automount, sshの公開鍵などを管理

できないこと:

  • 汎用的なLDAPサーバではありません。認証に特化しています。
  • 他社製品の中のクライアント側のサポートはできません。
  • WindowsのID管理を統合するものではありません

実装上の特徴:

  • 標準技術の組み合わせにより実装されています
    • そのため特に「IdMに対応」していない古いRHELやUnix系OSからも利用することができます
  • 非常にセキュア側に倒して機能を制限しています
    • パスワード再発行時には管理者が発行したあと必ずユーザー自身による再設定が強制される
    • パスワードのハッシュ値そのものは管理者であっても通常のクエリでは見えないし、設定もできない
    • パスワードはハッシュ値のみしか保持しない
  • Active Directory連携
    • Active DirectoryからIdMへパスワード更新をレプリケーションすることができます
    • IdMからActive Directoryへはレプリケーションできません
    • Cross realm trustにより、ADで発行したチケットを利用してIdMで認証、またはその逆が可能です。これによりWindows環境とLinux環境をまたいだシングルサインオンを実現します(RHEL7.0以降に同梱されるIdMから。クライアントはRHEL6.4以降)
  • 移行支援
    • NISやLDAPからの移行をサポートするスクリプトとドキュメントが同梱されています
  • UI
    • WebとコマンドラインでのUIが用意されています
  • 可用性
    • 20マルチマスタまでサポートし、高可用性はマルチマスタ構成と、
    • SSSDのキャッシュ機能により実現します。
  • identity managerはいろいろなOSSを組みあわせて実装されています。
    • NTPd, 389DirectoryServer (LDAPサーバ), MIT Kerberos, bind (DNSサーバ)など既存のもの
    • freeipa, dogtag, ipa-otpdなど新規に作成されたもの
  • Identity ManagerではActive Directoryに似た「ドメイン」の概念を導入しています。
    • 基本的にIdentity Managerは1ドメインの管理しかおこないません。
    • クライアント側はSSSDにより複数のドメインに参加することができます。クライアント数に制限はありません。


費用に関連する特徴:

  • RHEL Serverに同梱されていて追加費用はかかりません
  • アカウント数や接続数が増えても特に追加費用はかかりません
  • 直接ADに問いあわせる場合と比べてCALを減らせます。特にCross realm trustによる連携をおこなう場合, ADと連携してシングルサインオンが可能でありつつもIdMで管理されているのでADのCALが不要です。

FAQ:

  • IdMをつかわずにActive Directoryに直接といあわせたらいいんじゃないの?
    • はい。そうやって構成することもできます(Direct Integrationと呼ばれています)
    • 台数が少ない場合(30台くらいまで)ならいいかもしれません。多いとCALの費用が気になるはずです。
    • https://msdn.microsoft.com/en-us/library/cc731178.aspx によると、Identity Management for Unix はdeprecatedになりましたのでMSからサポートされる手順がなくなっているようです。
  • IdMをRHELでつかうときに注意することは?
    • 管理される側のRHELバージョンによりIdMのどの機能をサポートしているかなどの詳細が変わります。
  • サーバの前提条件は以下にまとまっています
  • Windowsの認証をおこなえますか?
    • サポートされませんし推奨もされませんが、WindowsにMIT Kerberosのクライアントを入れればできなくはないとおもわれます。
    • WindowsについてはADで管理し、Linux, UnixについてはIdMでというのが現実的なIdMの利用モデルです。

ドキュメント