zfs node work in prep for open-ebs zfs
This commit is contained in:
parent
5eb52e7adb
commit
14a126afa0
@ -5,4 +5,34 @@
|
||||
ansible_connection: ssh
|
||||
ansible_become_method: sudo
|
||||
ansible_become_user: root
|
||||
ansible_port: 22
|
||||
ansible_port: 22
|
||||
zfs_packages:
|
||||
- zfs-utils
|
||||
- zfs-dkms
|
||||
- mbuffer
|
||||
- smartmontools
|
||||
- linux-lts-headers
|
||||
zfs_key_id: DDF7DB817396A49B2A2723F7403BD972F75D9D76
|
||||
zfs_pools:
|
||||
- name: ssd
|
||||
ashift: 13
|
||||
type: ""
|
||||
disks: /dev/vde
|
||||
datasets:
|
||||
- name: ssd
|
||||
encrypt: false
|
||||
- name: ssd/data
|
||||
encrypt: false
|
||||
- name: ssd/data/open-ebs
|
||||
encrypt: false
|
||||
# - name: hdd
|
||||
# ashift: 12
|
||||
# type: mirror
|
||||
# disks: /dev/sda /dev/sdb
|
||||
# datasets:
|
||||
# - name: hdd
|
||||
# encrypt: false
|
||||
# - name: hdd/data
|
||||
# encrypt: true
|
||||
# - name: hdd/data/open-ebs
|
||||
# encrypt: false
|
15
ansible/roles/zfs_repo_install/defaults/main.yml
Normal file
15
ansible/roles/zfs_repo_install/defaults/main.yml
Normal file
@ -0,0 +1,15 @@
|
||||
---
|
||||
aur_zfs_key_fingerprint: '4F3BA9AB6D1F8D683DC2DFB56AD860EED4598027'
|
||||
zfs_prereq_packages:
|
||||
- gnupg
|
||||
- linux-lts-headers
|
||||
|
||||
zfs_arc_min: '1073741824'
|
||||
zfs_arc_max: '4294967296'
|
||||
zfs_zpool_ashift: '12'
|
||||
zfs_zpool_name: ssd
|
||||
zfs_zpool_compression: lz4
|
||||
zfs_zpool_type: mirror
|
||||
zfs_zpool_disk_a: /dev/disk/by-id/ata-Samsung_SSD_850_PRO_2TB_S3D4NX0J503633V
|
||||
zfs_zpool_disk_b: /dev/disk/by-id/ata-Samsung_SSD_850_PRO_2TB_S3D4NX0J708201E
|
||||
zfs_backup_dataset: ssd/backup
|
@ -0,0 +1 @@
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE+6ruP8XcCD3nWS9z0hp+Hnf6pxoL1nF4I0L9g9/3Sr zfs-recv@lab.balsillie.net
|
147
ansible/roles/zfs_repo_install/tasks/main.yml
Normal file
147
ansible/roles/zfs_repo_install/tasks/main.yml
Normal file
@ -0,0 +1,147 @@
|
||||
---
|
||||
|
||||
- name: check if zfs kernel module exists
|
||||
ansible.builtin.stat:
|
||||
path: /lib/modules/{{ ansible_kernel }}/updates/dkms/zfs.ko.zst
|
||||
register: zfs_module
|
||||
|
||||
- name: zfs install block
|
||||
when: not zfs_module.stat.exists
|
||||
block:
|
||||
|
||||
- name: add zfs repo to pacman.conf
|
||||
ansible.builtin.blockinfile:
|
||||
path: /etc/pacman.conf
|
||||
state: present
|
||||
insertafter: "EOF"
|
||||
block: |
|
||||
[archzfs]
|
||||
Server = http://mirror.sum7.eu/archlinux/archzfs/$repo/x86_64
|
||||
Server = https://mirror.biocrafting.net/archlinux/archzfs/$repo/x86_64
|
||||
|
||||
- name: download archzfs repo key
|
||||
ansible.builtin.uri:
|
||||
dest: "/tmp/{{ zfs_key_id }}"
|
||||
url: https://archzfs.com/archzfs.gpg
|
||||
creates: "/tmp/{{ zfs_key_id }}"
|
||||
|
||||
- name: install and lsign zfs key
|
||||
ansible.builtin.shell:
|
||||
cmd: "{{ item }}"
|
||||
with_items:
|
||||
- pacman-key --add /tmp/{{ zfs_key_id }}
|
||||
- pacman-key --lsign-key {{ zfs_key_id }}
|
||||
|
||||
- name: update system
|
||||
community.general.pacman:
|
||||
upgrade: true
|
||||
update_cache: true
|
||||
|
||||
- name: install zfs dkms module
|
||||
community.general.pacman:
|
||||
name: "{{ zfs_packages }}"
|
||||
state: latest
|
||||
|
||||
- name: set zfs module parameters
|
||||
ansible.builtin.template:
|
||||
src: zfs.conf.j2
|
||||
dest: /etc/modprobe.d/zfs.conf
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0664
|
||||
|
||||
- name: load zfs module
|
||||
community.general.modprobe:
|
||||
name: zfs
|
||||
state: present
|
||||
|
||||
- name: enable zfs services
|
||||
become: true
|
||||
ansible.builtin.service:
|
||||
name: "{{ item }}"
|
||||
state: started
|
||||
enabled: yes
|
||||
loop:
|
||||
- zfs-import-cache.service
|
||||
- zfs-mount.service
|
||||
- zfs.target
|
||||
|
||||
- name: reboot system
|
||||
ansible.builtin.reboot:
|
||||
post_reboot_delay: 90
|
||||
|
||||
- name: gather existing zpool facts
|
||||
community.general.zpool_facts:
|
||||
|
||||
# - name: create zpool list
|
||||
# ansible.builtin.set_fact:
|
||||
# zpool_list: []
|
||||
|
||||
# - name: add zpools to list
|
||||
# ansible.builtin.set_fact:
|
||||
# zpool_list: "{{ zpool_list + [item.name] }}"
|
||||
# with_items:
|
||||
# "{{ ansible_zfs_pools }}"
|
||||
|
||||
- name: create zpools
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
zpool create \
|
||||
-o ashift={{ item.ashift }} \
|
||||
-o autotrim=on \
|
||||
-o cachefile=/etc/zfs/zpool.cache \
|
||||
-O acltype=posixacl \
|
||||
-O atime=off \
|
||||
-O xattr=sa \
|
||||
-O mountpoint=none \
|
||||
-O canmount=off \
|
||||
-O devices=off \
|
||||
-O compression={{ item.compression }} \
|
||||
{{ item.name }} {{ item.type }} {{ item.disks }}
|
||||
when: item.name not in ( ansible_zfs_pools | selectattr("name") | list )
|
||||
with_items:
|
||||
"{{ zfs_pools }}"
|
||||
|
||||
- name: gather existing zfs dataset facts
|
||||
community.general.zfs_facts:
|
||||
name: "{{ item.name }}"
|
||||
recurse: true
|
||||
type: filesystem
|
||||
with_items:
|
||||
"{{ zfs_pools }}"
|
||||
|
||||
- name: create zfs datasets
|
||||
loop: "{{ zfs_pools | subelements('datasets') }}"
|
||||
community.general.zfs:
|
||||
name: "{{ item.1.name }}"
|
||||
state: present
|
||||
extra_zfs_properties:
|
||||
canmount: off
|
||||
mountpoint: none
|
||||
primarycache: none
|
||||
secondarycache: none
|
||||
reservation: none
|
||||
refreservation: none
|
||||
dedup: off
|
||||
encryption: off
|
||||
volmode: dev
|
||||
devices: off
|
||||
atime: off
|
||||
when: item.1.name not in ( ansible_zfs_datasets | selectattr("name") | list )
|
||||
|
||||
|
||||
|
||||
|
||||
# Adjust offset from 1H to 1D in zfs-scrub-monthly@{{ zfs-pool }}.timer
|
||||
|
||||
# TODO enable/start zfs-scrub-monthly@{{ zfs-pool }}.timer
|
||||
|
||||
# TODO configure /etc/zfs/zed.d/zed.rc
|
||||
|
||||
# TODO enable/start zfs-zed.service
|
||||
|
||||
# TODO possible configure /etc/conf.d/smartdargs
|
||||
|
||||
# TODO configure /etc/smartd.conf
|
||||
|
||||
# TODO enable/start smartd.service
|
8
ansible/roles/zfs_repo_install/templates/key-params.j2
Normal file
8
ansible/roles/zfs_repo_install/templates/key-params.j2
Normal file
@ -0,0 +1,8 @@
|
||||
Key-Type: 1
|
||||
Key-Length: 3072
|
||||
Subkey-Type: 1
|
||||
Subkey-Length: 3072
|
||||
Name-Real: Local Administrator
|
||||
Name-Email: root@{{ ansible_host }}
|
||||
Expire-Date: 0
|
||||
%no-protection
|
1
ansible/roles/zfs_repo_install/templates/smartd.conf.j2
Normal file
1
ansible/roles/zfs_repo_install/templates/smartd.conf.j2
Normal file
@ -0,0 +1 @@
|
||||
DEVICESCAN -a -o on -S on -s (S/../.././03|L/../01/./04) -W 4,45,60 -m notificationrecipient@emailprovider.com -M exec /usr/local/bin/smartdnotify.sh
|
27
ansible/roles/zfs_repo_install/templates/smartdnotify.sh.j2
Normal file
27
ansible/roles/zfs_repo_install/templates/smartdnotify.sh.j2
Normal file
@ -0,0 +1,27 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Create a file to store the message in. Give it a unique filename to avoid issues if this script runs twice simultaneously
|
||||
msgFile="/root/$(uuidgen).txt"
|
||||
|
||||
# Clear file, set subject line and formatting
|
||||
echo "Subject: $SMARTD_SUBJECT" > $msgFile
|
||||
echo "Content-Type: text/html" >> $msgFile
|
||||
echo "<html>" >> $msgFile
|
||||
echo "<style type=\"text/css\">pre { font-family:monospace }</style>" >> $msgFile
|
||||
echo "<body>" >> $msgFile
|
||||
echo "<pre>" >> $msgFile
|
||||
|
||||
# Save the email message from STDIN:
|
||||
cat >> $msgFile
|
||||
|
||||
# Append the output of zpool status:
|
||||
/usr/sbin/zpool status >> $msgFile
|
||||
|
||||
# Append the output of smartctl -a to the message:
|
||||
/usr/sbin/smartctl -a "$SMARTD_DEVICE" >> $msgFile
|
||||
|
||||
# Close HTML tags
|
||||
echo "</pre></body></html>" >> $msgFile
|
||||
|
||||
# Now email the message to the user at address ADD:
|
||||
/bin/msmtp "$SMARTD_ADDRESS" < $msgFile
|
2
ansible/roles/zfs_repo_install/templates/zfs.conf.j2
Normal file
2
ansible/roles/zfs_repo_install/templates/zfs.conf.j2
Normal file
@ -0,0 +1,2 @@
|
||||
options zfs zfs_arc_min={{ zfs_arc_min }}
|
||||
options zfs zfs_arc_max={{ zfs_arc_max }}
|
16
notes/2023-01-09_ebs-zfs.txt
Normal file
16
notes/2023-01-09_ebs-zfs.txt
Normal file
@ -0,0 +1,16 @@
|
||||
created a zfs zvol on hv00 ssd
|
||||
sudo zfs create -V 100G \
|
||||
-o compression=off \
|
||||
-o volblocksize=16k \
|
||||
-o reservation=none \
|
||||
-o refreservation=none \
|
||||
-o primarycache=metadata \
|
||||
-o secondarycache=none \
|
||||
-o volmode=dev \
|
||||
nvme/libvirt/vhds/data/kube0
|
||||
|
||||
added zfs storage pool to libvirt
|
||||
add zvol as disk (vde)
|
||||
|
||||
add zfs repo to kube01
|
||||
create zpool from vde
|
Loading…
Reference in New Issue
Block a user