{"id":3491,"date":"2023-06-19T07:00:00","date_gmt":"2023-06-19T05:00:00","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=3491"},"modified":"2023-06-01T08:25:55","modified_gmt":"2023-06-01T06:25:55","slug":"rhel-system-roles-storage","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-storage\/","title":{"rendered":"RHEL System Roles: storage"},"content":{"rendered":"\n<p>Willkommen zu Teil 6 meiner losen Reihe \u00fcber die <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/vorstellung-der-red-hat-enterprise-linux-rhel-system-roles\/\" data-type=\"post\" data-id=\"3338\">RHEL System Roles<\/a>. In diesem Teil stelle ich euch die Rolle <em>storage<\/em> vor, mit welcher sich unpartitionierte Laufwerke und <a href=\"https:\/\/de.wikipedia.org\/wiki\/Logical_Volume_Manager\">LVM<\/a>-Volumes verwalten lassen.<\/p>\n\n\n\n<p>Zuerst stelle ich meinen Anwendungsfall vor. Anschlie\u00dfend beschreibe ich, wie ich diesen mithilfe der RHEL System Role <em>storage <\/em>l\u00f6se.<\/p>\n\n\n\n<p>W\u00e4hrend mir dieser Artikel zur Dokumentation dient, soll er euch den Einsatz von RHEL System Roles verdeutlichen.<\/p>\n\n\n\n<p><strong>Hinweis:<\/strong> Zum Zeitpunkt der Erstellung dieses Artikels unterst\u00fctzt die Rolle die LVM-Konfiguration lediglich auf unpartitionierten Laufwerken, welche komplett als Physical Volume (PV) genutzt werden.<\/p>\n\n\n\n<p>Wer sich an dieser Stelle fragt, was RHEL System Roles sind, wie man sie installiert und nutzt, dem empfehle ich am Anfang zu beginnen: <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/vorstellung-der-red-hat-enterprise-linux-rhel-system-roles\/\" data-type=\"post\" data-id=\"3338\">Vorstellung der Red Hat Enterprise Linux (RHEL) System Roles<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Anwendungsfall<\/h2>\n\n\n\n<p>Mit der Ansible-Rolle kvm_provision_lab (siehe <a href=\"#quellen-links\">[1,2]<\/a>) provisioniere ich virtuelle Maschinen (VM) auf KVM\/QEMU-Hypervisoren. In \u201e<a href=\"https:\/\/www.my-it-brain.de\/wordpress\/labor-umgebung-mit-ansible-in-kvm-erstellen\/\" data-type=\"post\" data-id=\"3070\">Labor-Umgebung mit Ansible in KVM erstellen<\/a>\u201c habe ich die Anwendung dieser Rolle bereits detailliert beschrieben. Eine VM wird darin als ein <a href=\"https:\/\/de.wikipedia.org\/wiki\/YAML\">YAML<\/a>-Dictionary nach folgendem Muster definiert:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>test-vm1:\n    vm_ram_mb: 512\n    vm_vcpus: 1\n    vm_iftype: network\n    vm_net: default\n    os_type: rhel9\n    file_type: qcow2\n    base_image_name: rhel9-template\n    vm_template: \"rhel9-template\"\n    second_hdd: true\n    second_hdd_size: \"2G\"<\/code><\/pre>\n\n\n\n<p>Das Beispiel im Code-Block provisioniert eine VM mit einem zweiten Blocklaufwerk. Dieses wird in der VM als <code>\/dev\/vdb<\/code> konfigruiert.<\/p>\n\n\n\n<p>Um das zweite Laufwerk nutzen zu k\u00f6nnen, m\u00fcssen zuerst eine Partitionstabelle und eine Partition erstellt und diese mit einem Dateisystem formatiert werden. Alternativ kann das Ger\u00e4t auch f\u00fcr LVM verwendet werden.<\/p>\n\n\n\n<p>Ich m\u00f6chte aus <code>\/dev\/vdb<\/code> ein PV f\u00fcr LVM machen, um es einer Volume Group (VG) <em>vg_data<\/em> hinzuzuf\u00fcgen und ein Logical Volume (LV) zu erstellen, welches die gesamte Speicherkapazit\u00e4t von <code>\/dev\/vdb<\/code> nutzt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Die Rolle<\/h2>\n\n\n\n<p>Durch die Installation des Pakets <code>rhel-system-roles<\/code> existiert diese Rolle <em>storage <\/em>bereits auf meinem System und muss nur noch konfiguriert werden. Die Rolle selbst findet man im Pfad <code>\/usr\/share\/ansible\/roles\/rhel-system-roles.stroage\/<\/code> und die Dokumentation in <code>\/usr\/share\/doc\/rhel-system-roles\/storage\/README.md<\/code>. Aus letzterer stammt auch folgendes Beispiel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Example Playbook\n----------------\n\n```yaml\n- hosts: all\n\n  roles:\n    - name: rhel-system-roles.storage\n      storage_pools:\n        - name: app\n          disks:\n            - sdb\n            - sdc\n          volumes:\n            - name: shared\n              size: \"100 GiB\"\n              mount_point: \"\/mnt\/app\/shared\"\n              #fs_type: xfs\n              state: present\n            - name: users\n              size: \"400g\"\n              fs_type: ext4\n              mount_point: \"\/mnt\/app\/users\"\n      storage_volumes:\n        - name: images\n          type: disk\n          disks: &#91;\"mpathc\"]\n          mount_point: \/opt\/images\n          fs_label: images\n\n```<\/code><\/pre>\n\n\n\n<p>Da ich auf \/dev\/vdb ein LVM konfigurieren m\u00f6chte, kopiere ich mir das Dictionary <code>storage_pools<\/code> aus obigen Beispiel und passe es f\u00fcr mein Playbook an.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Das Playbook<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>---\n- hosts: test-vm1\n\n  roles:\n    - name: rhel-system-roles.storage\n      storage_pools:\n        - name: vg_data\n          disks:\n            - vdb\n          volumes:\n            - name: data1\n              size: \"2 GiB\"\n              mount_point: \"\/mnt\"\n              fs_type: ext4\n              state: present<\/code><\/pre>\n\n\n\n<p>Obiges Playbook f\u00fchrt folgende Schritte auf dem Host <code>test-vm1<\/code> durch:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Das Blockger\u00e4t <code>\/dev\/vdb<\/code> wird als PV f\u00fcr LVM konfiguriert.<\/li>\n\n\n\n<li>Es wird die Volume Group (VG) <code>vg_data<\/code> auf dem PV <code>\/dev\/vdb<\/code> erstellt.<\/li>\n\n\n\n<li>In der VG <code>vg_data<\/code> wird das LV <code>data1<\/code> erstellt.<\/li>\n\n\n\n<li>Das LV wird mit dem Dateisystem Ext4 formatiert.<\/li>\n\n\n\n<li>Das LV wird unterhalb von <code>\/mnt<\/code> eingeh\u00e4ngt.<\/li>\n<\/ol>\n\n\n\n<p>Innerhalb des Gast-Betriebssystems l\u00e4sst sich mit folgenden Kommandos pr\u00fcfen, dass die Konfiguration wie gew\u00fcnscht durchgef\u00fchrt wurde.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@test-vm1 ~]# lsblk vdb\nlsblk: vdb: not a block device\n&#91;root@test-vm1 ~]# lsblk \/dev\/vdb\nNAME            MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS\nvdb             252:16   0   2G  0 disk \n\u2514\u2500vg_data-data1 253:0    0   2G  0 lvm  \/mnt\n&#91;root@test-vm1 ~]# pvs\n  PV         VG      Fmt  Attr PSize  PFree\n  \/dev\/vdb   vg_data lvm2 a--  &lt;2.00g    0 \n&#91;root@test-vm1 ~]# vgs\n  VG      #PV #LV #SN Attr   VSize  VFree\n  vg_data   1   1   0 wz--n- &lt;2.00g    0 \n&#91;root@test-vm1 ~]# lvs\n  LV    VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert\n  data1 vg_data -wi-ao---- &lt;2.00g                                                    \n&#91;root@test-vm1 ~]# mount | grep mnt\n\/dev\/mapper\/vg_data-data1 on \/mnt type ext4 (rw,relatime,seclabel)\n&#91;root@test-vm1 ~]# echo \"Hallo Welt!\" &gt;\/mnt\/world.txt\n&#91;root@test-vm1 ~]# cat \/mnt\/world.txt\nHallo Welt!<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Der betrachtete Anwendungsfall l\u00e4sst sich mit der vorgestellten Ansible-Rolle schnell und einfach umsetzen. Man deklariert lediglich die Wunschkonfiguration im Ansible-Playbook und die Rolle k\u00fcmmert sich um den Rest, wie die Installation der notwendigen Pakete auf den Zielsystemen.<\/p>\n\n\n\n<p>Unterst\u00fctzt werden als Zielsysteme aktuell EL 7-9 sowie Fedora. Damit ist sie f\u00fcr die Anwendung auf Debian bzw. darauf basierende Systeme nicht geeignet. Wie man auch f\u00fcr diese Systeme ein einfaches Playbook entwirft, um LVM f\u00fcr Blockger\u00e4te zu konfigurieren, werde ich in einem folgenden Artikel zeigen.<\/p>\n\n\n\n<p>Ich hoffe, dass euch auch die Vorstellung dieser Rolle gefallen hat und w\u00fcnsche euch viel Spa\u00df bei der Nutzung der RHEL System Roles.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"quellen-links\">Quellen und weiterf\u00fchrende Links<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/galaxy.ansible.com\/Tronde\/kvm_provision_lab\">https:\/\/galaxy.ansible.com\/Tronde\/kvm_provision_lab<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/Tronde\/kvm_provision_lab\">https:\/\/github.com\/Tronde\/kvm_provision_lab<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/linux-system-roles\/storage\">https:\/\/github.com\/linux-system-roles\/storage<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/vorstellung-der-red-hat-enterprise-linux-rhel-system-roles\/\" data-type=\"post\" data-id=\"3338\">Vorstellung der Red Hat Enterprise Linux (RHEL) System Roles<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-selinux\/\" data-type=\"post\" data-id=\"3346\">RHEL System Roles: selinux<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-timesync\/\" data-type=\"post\" data-id=\"3351\">RHEL System Roles: timesync<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-sshd\/\" data-type=\"post\" data-id=\"3359\">RHEL System Roles: sshd<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-firewall\/\" data-type=\"post\" data-id=\"3367\">RHEL System Roles: firewall<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Willkommen zu Teil 6 meiner losen Reihe \u00fcber die RHEL System Roles. In diesem Teil stelle ich euch die Rolle storage vor, mit welcher sich unpartitionierte Laufwerke und LVM-Volumes verwalten lassen. Zuerst stelle ich meinen Anwendungsfall vor. Anschlie\u00dfend beschreibe ich, wie ich diesen mithilfe der RHEL System Role storage l\u00f6se. W\u00e4hrend mir dieser Artikel zur<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-storage\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[532],"tags":[754,776,756],"class_list":["post-3491","post","type-post","status-publish","format-standard","hentry","category-ansible","tag-rhel-system-roles","tag-storage","tag-system-roles"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3491","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=3491"}],"version-history":[{"count":5,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3491\/revisions"}],"predecessor-version":[{"id":3505,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3491\/revisions\/3505"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=3491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=3491"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=3491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}