Home

 

Server::Gebruikersdata Opslag

Naar index

Centrale Opslag van Gebruikersdata


  


Overal data
Bij Linux distributies worden belangrijke gebruikersdata op diverse locaties bewaard. Bijvoorbeeld de Home directories bevinden zich in /home, BackupPC in /var/lib/BackupPC, www-default in /var/www/html, etc. Het centraliseren van gebruikersdata helpt niet alleen met opslagbeheer, maar vereenvoudigt ook backupbeheer.

Centrale Opslag Manipuleren met bindmounts
Om de opslagruimte correct en efficient te gebruiken zal het nodig zijn mountpoints en datastructuren te wijzigen.
De strategie is groeiende gebruikersdata op afzonderlijke partities op te slaan en deze opslagruimte te verdelen met behulp van bindmounts.

Naar index

Logical Volume Manager

LVM staat voor Logical Volume Manager. Het geeft veel flexibiliteit met partities.
Zie voor het hele LVM verhaal de LVM Administrator's Guide

   


Logical Volume's (LV) zoals: root, var, logs en swap

Volume Group's (VG) zoals: main en data

Physical Volume's (PV) zoals: sda2, sda3, sdb1 en sdc1

Dingen die LVM kan doen:

Naar index

Standaard Partitionering Testserver

Logisch volumebeheer (LVM) versus standaard partitionering in Linux
De opslagcapaciteit van een server wordt al tientallen jaren beheerd via schijfstations en partitieconfiguraties. Deze strategieën werken duidelijk goed en betrouwbaar.
Er zijn echter veel voordelen aan het heroverwegen van het opslagbeheer op lokale servers zoals hierboven beschreven.

Bij veel Linux distributies en ook Ubuntu wordt het LVM aanbevolen. Op mijn Servers met ClearOS is dit ook uitgeprobeerd.
LVM heeft zeker zijn voordelen maar dan vooral voor professionele toepassingen.
Omdat het zo veelzijdig is, is het gebruik ook behoorlijk complex. Bijvoorbeeld het vervangen van een gecrashte HDD is niet zomaar gedaan.

Voor de Testserver (en later de Thuisserver) is daarom gekozen voor een traditioneel systeem met individuele HDD's en het toepassen van de 3-2-1 backup-regel

3-2-1 regel
Deze kan helpen bij de inrichting van je back­upproces. Zorg voor 3 versies van je data (je productiedata en twee back-ups), op 2 verschillende media (bijvoorbeeld op fysieke gescheiden harde schijven), met 1 kopie op een andere locatie voor noodherstel (bijvoorbeeld een kluis in een ander gebouw).
Door back­ups op een andere locatie op te slaan kun je, indien bijvoorbeeld ransomware je bedrijfsnetwerk heeft versleuteld, je systemen herstellen.

De gekozen opslagstrategie op de Testserver benodigd 5 partities op 4 fysiek gescheiden HDD's:

  1. SDA met sda1 /boot/efi partitie en sda2 met / het Ubuntu Server OS
  2. SDB met '/Home/Live' gebruikersdata (Fileserver en Webserver)
  3. SDC met '/Home/Backup' van SDA en SDB en netwerk PC's
  4. SDD met '/Vault' met backup van SDC

De backupdata op SDD worden uiteindelijk regelmatig weggeschreven naar een 'air-gapped' Backup Server

Boot:
Het is verstandig om boot apart te houden. Op die manier is het een ouderwetse partitie die makkelijk door GRUB of andere systemen gelezen kan worden. Houdt tenminste 500 MB aan voor de /boot partitie.

/:
Op de sda2 partitie wordt het systeem (OS) geplaatst. Op de Mainserver met ClearOS is hiervoor +/- 10 GB in gebruik.
Omdat we over een onnodig grote HDD beschikken reserveren we een riante 200 GB (mocht bijv. /var onverwacht groeien)

Backup Flowchart
Zie voor een gedetailleeerd overzicht van datastromen op de server de Backup Flowchart in de sectie Server::Backup en Restore

Naar index

Standaard Partitionering Thuisserver

Voor de Thuisserver is gekozen voor een traditioneel systeem met individuele HDD's en het toepassen van de 3-2-1 backup-regel

3-2-1 regel
Deze kan helpen bij de inrichting van je back­upproces. Zorg voor 3 versies van je data (je productiedata en twee back-ups), op 2 verschillende media (bijvoorbeeld op fysieke gescheiden harde schijven), met 1 kopie op een andere locatie voor noodherstel (bijvoorbeeld een kluis in een ander gebouw).
Door back­ups op een andere locatie op te slaan kun je, indien bijvoorbeeld ransomware je bedrijfsnetwerk heeft versleuteld, je systemen herstellen.

De gekozen opslagstrategie op de Thuisserver benodigd 4 partities op 4 fysiek gescheiden HDD's:

  1. SSD nvme0n1p2 met / (root) inclusief /boot en het Ubuntu Server OS
    Note: De firmware van de Thuisserver heeft geen aparte partitie nodig voor /Boot
  2. SDA met '/Home/Live' gebruikersdata (Fileserver en Webserver)
  3. SDB met '/Home/Backup' van ssd nvme0n1, hdd SDA en netwerk PC's
  4. SDC met '/Vault' met backup van SDB

De backupdata op SDD worden uiteindelijk regelmatig weggeschreven naar een 'air-gapped' Backup Server

Backup Flowchart
Zie voor een gedetailleeerd overzicht van datastromen op de server de Backup Flowchart in de sectie Server::Backup en Restore

Naar index

Storage toevoegen (Testserver)

Voor de Thuisserver gelden dezelfde procedures

Mounts in fstab na installatie
Het fstab-bestand wordt gebruikt om te definiëren hoe schijfpartities, verschillende andere blokapparaten of externe bestandssystemen in het bestandssysteem moeten worden gekoppeld.
Na de initiële installatie van Ubuntu Server ziet /etc/fstab er als volgt uit:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#                
#/boot/efi
/dev/disk/by-uuid/E8FE-D249                             /boot/efi vfat defaults 0 1
# / was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/d64f0a07-e68d-4163-b85f-e645740e3c93 /          ext4 defaults 0 1
/swap.img       none    swap    sw      0       0

Monteer schijven en boot

root@testserver:~# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   1.8T  0 disk
├─sda1  8:1    0     1G  0 part /boot/efi
├─sda2  8:2    0 204.8G  0 part /
└─sda3  8:3    0   1.6T  0 part
sdb      8:16   0   3.6T  0 disk
sdc      8:32   0   3.6T  0 disk
sdd      8:48   0   3.6T  0 disk

Naar index

Maak en formatteer partitions

Dezelfde procedures voor:
/dev/sdb
/dev/sdc
/dev/sdd:

Maak partitie

root@testserver:~# sudo fdisk /dev/sdc
Welcome to fdisk (util-linux 2.39.3).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
The size of this disk is 3.6 TiB (4000787030016 bytes).
DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors.
Use GUID partition table format (GPT). Created a new DOS (MBR) disklabel with disk identifier 0xf647641f. Command (m for help): g (create a new empty GPT partition table) Created a new GPT disklabel (GUID: C3D6CB22-7844-445F-8934-18649BBA67A0). Command (m for help): n (add a new partition) ... Created a new partition 1 of type 'Linux filesystem' and of size 3.6 TiB. Command (m for help): p Disk /dev/sdc: 3.64 TiB, 4000787030016 bytes, 7814037168 sectors Disk model: ST4000NE001-2MA1 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: gpt Disk identifier: C3D6CB22-7844-445F-8934-18649BBA67A0 Device Start End Sectors Size Type /dev/sdc1 2048 7814035455 7814033408 3.6T Linux filesystem Command (m for help): w (write table to disk and exit) The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.

Formatteer partitie met ext4

root@testserver:~# sudo mkfs.ext4 /dev/sdc1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 976754176 4k blocks and 244195328 inodes
Filesystem UUID: 0d83516e-6456-457c-a2b0-e131078bb6fa
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848, 512000000, 550731776, 644972544

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information:
Done

Naar index

Maak Mountpoints

Zie ook Backup Flowchart

root@homeserver:~# mkdir /store
root@homeserver:~# mkdir /store/live
root@homeserver:~# mkdir /store/backup
root@homeserver:~# mkdir /vault

Naar index

Voeg devices toe aan /etc/fstab

Haal UUID's

root@testserver:~# blkid
/dev/sdd1: UUID="4db44beb-a6a9-4590-b590-a76f8de9a0e4" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1463d777-ddae-4744-af13-d3217ce48b86"
/dev/sdb1: UUID="d9cb8e2d-18d6-4e0c-89a7-c613737fcba9" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="ecb3aa8c-68a2-48fe-bcdf-418c33f687e7"
/dev/sdc1: UUID="5c82eb2f-f20d-4989-a824-e52db0d6ea09" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="ea032dcb-b7c0-49ec-893b-55aaa0d68083"
/dev/sda2: UUID="d64f0a07-e68d-4163-b85f-e645740e3c93" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1a7566b5-f645-4ef7-bb22-58f91b8b198c"
/dev/sda3: UUID="e2631cdd-9201-469b-9fd6-381e2afa90d0" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="9a48e9c4-b4de-4ce5-a675-7d6463b26888"
/dev/sda1: UUID="E8FE-D249" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="9c2617c0-f906-436a-90b5-e8387eb2dc82"

Gebruik UUID's voor specificeren devices

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#                
#/dev/sda1
/dev/disk/by-uuid/E8FE-D249 /boot/efi vfat defaults 0 1
#/dev/sda2
/dev/disk/by-uuid/d64f0a07-e68d-4163-b85f-e645740e3c93 /              ext4  defaults 0 1
/swap.img       none    swap    sw      0       0
#/dev/sdb1
/dev/disk/by-uuid/d9cb8e2d-18d6-4e0c-89a7-c613737fcba9 /store/live    ext4  defaults 1 2
#/dev/sdc1
/dev/disk/by-uuid/5c82eb2f-f20d-4989-a824-e52db0d6ea09 /store/backup  ext4  defaults 1 2
#/dev/sdd1
/dev/disk/by-uuid/4db44beb-a6a9-4590-b590-a76f8de9a0e4 /vault         ext4  defaults 1 2

Naar index

Verhuis HOME naar bindmount /store/live

Maak de bindmount directory

root@testserver:~# mkdir /store/live/home

Verzamel informatie van de bron directory

root@testserver:~# ls -la /home/|head -n2
total 36
drwxr-xr-x  8 root    root     4096 Nov 19 16:26 .

Voer de commando's uit om de permissies van bron naar doel te synchroniseren

root@testserver:~# chown --reference /home /store/live/home
root@testserver:~# chmod --reference /home /store/live/home

Naar index

Valideer resultaat:

root@testserver:~# ls -la /store/live/home | head -n2
total 36
drwxr-xr-x 8 root    root     4096 Nov 19 16:26 .

Stop nu elke potentieel aanwezige service die momenteel de brondirectorie mogelijk gebruikt.
Voor /home zou dat bijvoorbeeld Piwigo of Wordpress kunnen zijn waarvan de foto's in een /home subdirectory opgeslagen zijn, Samba die de verschillende /home shares beheert en/of BackupPC.
Voor de zekerheid:

root@testserver:~# systemctl stop smb
root@testserver:~# systemctl stop apache2
root@testserver:~# systemctl stop backuppc
root@testserver:~# systemctl stop mariadb 

Verhuis de data naar de nieuwe locatie:

root@testserver:~# rsync -av --delete /home/* /store/live/home/.

Verifiëer dat de informatie op de nieuwe locatie is:

root@tetsserver:~# ls -l /store/live/home
total 28
drwxr-x--- 2 archief lanshare 4096 Nov  5 15:30 archief
drwxr-x--- 2 ben     ben      4096 Nov  5 14:58 ben
drwxr-x--- 2 benovo  benovo   4096 Nov 19 16:26 benovo
drwxr-x--- 2 erica   erica    4096 Nov  3 16:05 erica
drwxr-x--- 2 files   lanshare 4096 Nov  5 15:14 files
drwxr-x--- 7 ububen  ububen   4096 Nov 14 10:04 ububen

Naar index

Verwijder de data uit de oude locatie:

root@testserver:~# rm -rf /home/*
root@testserver:~# ls -l /home
total 0

Maak de bindmount aan in /etc/fstab door een nieuwe lijn toe te voegen:

/store/live/home  /home none bind,rw 0 0

Mount de toegevoegde device en verifiëer de bindmount :

root@testserver:~## mount -a
root@testserver:~# ls -l /home total 28 drwxr-x--- 2 archief lanshare 4096 Nov 5 15:30 archief drwxr-x--- 2 ben ben 4096 Nov 5 14:58 ben drwxr-x--- 2 benovo benovo 4096 Nov 19 16:26 benovo drwxr-x--- 2 erica erica 4096 Nov 3 16:05 erica drwxr-x--- 2 files lanshare 4096 Nov 5 15:14 files drwxr-x--- 7 ububen ububen 4096 Nov 14 10:04 ububen

Start de eventuele services die gestopt waren:

# systemctl start smb
# systemctl start httpd
# systemctl start backuppc
# systemctl start mariadb

Naar index

Verhuis MariaDB data naar bindmount /store/live

Zie ook Server::Apache > Verhuis MariaDB data naar bindmount /store/live

Maak de bindmount directory

root@testserver:~# mkdir /store/live/mysql

Verzamel informatie van de bron directory

root@testserver:~# ls -la /var/lib/mysql/|head -n2
total 123356
drwxr-xr-x  6 mysql mysql      4096 Dec  6 15:16 .

Voer de commando's uit om de permissies van bron naar doel te synchroniseren

root@testserver:~# chown --reference /var/lib/mysql /store/live/mysql
root@testserver:~# chmod --reference /var/lib/mysql /store/live/mysql

Naar index

Valideer resultaat:

root@testserver:~# ls -la /store/live/mysql | head -n2
total 8
drwxr-xr-x 2 mysql mysql 4096 Dec  6 15:44 .

Stop nu elke potentieel aanwezige service die momenteel de brondirectorie mogelijk gebruikt.
Voor /home zou dat bijvoorbeeld Piwigo of Wordpress kunnen zijn waarvan de foto's in een /home subdirectory opgeslagen zijn, Samba die de verschillende /home shares beheert en/of BackupPC.
Voor de zekerheid:

root@testserver:~# systemctl stop smb
root@testserver:~# systemctl stop apache2
root@testserver:~# systemctl stop backuppc
root@testserver:~# systemctl stop mariadb 

Verhuis de data naar de nieuwe locatie:

root@testserver:~# rsync -av --delete /var/lib/mysql/* /store/live/mysql/.

Verifiëer dat de informatie op de nieuwe locatie is:

root@testserver:~# ls -l /store/live/mysql
total 111036
-rw-rw---- 1 mysql mysql    417792 Dec  6 16:06 aria_log.00000001
-rw-rw---- 1 mysql mysql        52 Dec  6 16:06 aria_log_control
-rw-r--r-- 1 root  root          0 Nov 26 12:50 debian-10.11.flag
-rw-rw---- 1 mysql mysql      1317 Dec  6 16:06 ib_buffer_pool
-rw-rw---- 1 mysql mysql  12582912 Dec  6 16:06 ibdata1
-rw-rw---- 1 mysql mysql 100663296 Dec  6 16:06 ib_logfile0
-rw-rw---- 1 mysql mysql         0 Nov 26 12:51 multi-master.info
drwx------ 2 mysql mysql      4096 Nov 26 12:50 mysql
-rw-r--r-- 1 root  root         15 Nov 26 12:50 mysql_upgrade_info
drwx------ 2 mysql mysql      4096 Nov 26 12:50 performance_schema
drwx------ 2 mysql mysql      4096 Nov 26 15:33 phpmyadmin
drwx------ 2 mysql mysql     12288 Nov 26 12:50 sys

Naar index

Verwijder de data uit de oude locatie:

root@testserver:~# rm -rf /var/lib/mysql/*
root@testserver:~# ls -l /var/lib/mysql
total 0

Maak de bindmount aan in /etc/fstab door een nieuwe lijn toe te voegen:

/store/live/mysql  /var/lib/mysql none bind,rw 0 0

Mount de toegevoegde device en verifiëer de bindmount :

root@testserver:~## mount -a
root@testserver:~# ls -l /var/lib/mysql total 28 drwxr-x--- 2 archief lanshare 4096 Nov 5 15:30 archief drwxr-x--- 2 ben ben 4096 Nov 5 14:58 ben drwxr-x--- 2 benovo benovo 4096 Nov 19 16:26 benovo drwxr-x--- 2 erica erica 4096 Nov 3 16:05 erica drwxr-x--- 2 files lanshare 4096 Nov 5 15:14 files drwxr-x--- 7 ububen ububen 4096 Nov 14 10:04 ububen

Start de eventuele services die gestopt waren:

# systemctl start smb
# systemctl start httpd
# systemctl start backuppc
# systemctl start mariadb

Naar index

Verhuis Webroot naar bindmount /store/live

Zie ook Server::Apache > Verhuis Webroot naar bindmount /store/live

Maak de bindmount directory

# mkdir /store/live/webroot

Verzamel informatie van de bron directory

[root@testserver ~]# ls -la /var/www/html |head -n2
total 52
drwxr-xr-x  5 root lanshare 4096 Dec  4 11:30 .

Voer de commando's uit om de permissies van bron naar doel te synchroniseren

# chown --reference /var/www/html /store/live/webroot
# chmod --reference /var/www/html /store/live/webroot

Naar index

Valideer resultaat:

[root@testserver ~]# ls -al /store/live/webroot |head -n2
total 0
drwxrwx--- 2 website lan   6 Oct 19 16:50 .

Stop nu elke service die momenteel de bron directory mogelijk gebruikt.

# systemctl stop smb
# systemctl stop apache2
# systemctl stop backuppc
# systemctl stop mariadb 

Verhuis de data naar de nieuwe locatie:

[root@testserver ~]# rsync -av --delete /var/www/html/* /store/live/webroot/.

Verifiëer dat de informatie op de nieuwe locatie is:

[root@testserver ~]# ls -l /store/live/webroot
total 44
-rw-rw-r--  1 root lanshare  367 Jan 27  2014 clearphpcache.php
drwxr-xr-x 15 root lanshare 4096 Dec  4 10:48 exploringlinux
-rw-rw-r--  1 root lanshare 7405 Dec  4 11:29 index.html
-rw-r--r--  1 root lanshare 7050 Apr  6  2022 index-normaal.html
-rw-r--r--  1 root lanshare   69 Oct 31 17:02 klamzweet
drwxr-xr-x  4 root lanshare 4096 Dec  4 11:31 mainmenu
drwxr-xr-x  9 root lanshare 4096 Dec  4 11:00 nbp
-rw-r--r--  1 root lanshare   24 Dec 11  2015 phpinfo.php
-rw-rw-r--  1 root lanshare   82 Jun 22  2017 robots.txt

Naar index

Verwijder de data uit de oude locatie:

[root@testserver ~]# rm -rf /var/www/html/*
[root@testserver ~]# ls -l /var/www/html
total 0

Maak de bindmount aan in /etc/fstab door een nieuwe lijn toe te voegen:

/store/live/webroot  /var/www/html none bind,rw 0 0

Mount de toegevoegde device en verifiëer de bindmount :

[root@homeserver ~]# mount -a

[root@testserver ~]# ls -l /var/www/html
total 44
-rw-rw-r--  1 root lanshare  367 Jan 27  2014 clearphpcache.php
drwxr-xr-x 15 root lanshare 4096 Dec  4 10:48 exploringlinux
-rw-rw-r--  1 root lanshare 7405 Dec  4 11:29 index.html
-rw-r--r--  1 root lanshare 7050 Apr  6  2022 index-normaal.html
-rw-r--r--  1 root lanshare   69 Oct 31 17:02 klamzweet
drwxr-xr-x  4 root lanshare 4096 Dec  4 11:31 mainmenu
drwxr-xr-x  9 root lanshare 4096 Dec  4 11:00 nbp
-rw-r--r--  1 root lanshare   24 Dec 11  2015 phpinfo.php
-rw-rw-r--  1 root lanshare   82 Jun 22  2017 robots.txt

Start de eventuele services die gestopt waren:

# systemctl start smb
# systemctl start httpd
# systemctl start backuppc
# systemctl start mariadb

Naar index

Verhuis BackupPC naar bindmount /store/backup

Maak de bindmount directory

# mkdir /store/backup/backuppc

Verzamel informatie van de bron directory

[root@testserver /]# ls -la /var/lib/backuppc |head -n2
total 4
drwxr-x---   6 backuppc backuppc 4096 Jan  3 15:06 .

Voer de commando's uit om de permissies van bron naar doel te synchroniseren

# chown --reference /var/lib/backuppc /store/backup/backuppc
# chmod --reference /var/lib/backuppc /store/backup/backuppc

Naar index

Valideer resultaat:

[root@testserver /]# ls -al /store/backup/backuppc|head -n2
total 0
drwxr-x--- 2 backuppc backuppc 4096 Jan  4 16:05 .

Stop nu elke service die momenteel de bron directory mogelijk gebruikt.

# systemctl stop backuppc 

Verhuis de data naar de nieuwe locatie
LET OP!!
De BackupPC-bestanden bevatten eindeloos veel 'hardlinks' (naar de bestanden in de basis (full) backup).
Voeg de rsync optie -H toe, zodat de hardlinks gecopieerd worden en niet het bestanden waarnaar ze verwijzen

# rsync -avH --delete /var/lib/backuppc/* /store/backup/backuppc/.

Verifiëer dat de informatie op de nieuwe locatie is:

[root@testserver /]# ls -l /store/backup/backuppc
total 0
drwxr-x--- 130 backuppc backuppc 4096 Jan  4 14:56 cpool
drwxr-x--- 2 backuppc backuppc 4096 Jan 4 16:09 log
drwxr-x--- 3 backuppc backuppc 4096 Jan 3 15:06 pc
drwxr-x--- 2 backuppc backuppc 4096 Apr 8 2024 pool

Naar index

Verwijder de data uit de oude locatie:

[root@testserver /]# rm -rf /var/lib/backuppc/*
[root@testserver /]# ls -l /var/lib/backuppc
total 0

Maak de bindmount aan in /etc/fstab door een nieuwe lijn toe te voegen:

/store/backup/backuppc /var/lib/backuppc       none bind,rw 0 0

Mount de toegevoegde device en verifiëer de bindmount :

[root@testserver ~]# mount -a

[root@testserver /]# ls -l /var/lib/backuppc
total 0
drwxr-x--- 2 backuppc root 10 Apr 28  2017 cpool
drwxr-x--- 2 backuppc root 10 Apr 28  2017 pc
drwxr-x--- 2 backuppc root 10 Apr 28  2017 pool
drwxr-x--- 2 backuppc root 10 Apr 28  2017 trash

Start de services die gestopt waren:

# systemctl start backuppc 

Naar index