sed with delimiter – any other single character in replacing words or characters

It is not so known fact that this powerful unix world command

sed

could be used with other delimiter than “/” (when replacing words or characters), which is used in 100% of the time in the Internet examples.
You probably know the syntax from the manual like:

s/regexp/replacement/
              Attempt to match regexp against the pattern space.  If successful, replace that portion matched with replacement.  The replacement may  con‐
              tain  the special character & to refer to that portion of the pattern space which matched, and the special escapes \1 through \9 to refer to
              the corresponding matching sub-expressions in the regexp.

The Internet examples always use “/” as shown in the man, BUT you CAN use “#” instead of “/” for example:

s#regexp#replacement#g

or

s:regexp:replacement:g

or you can even use letter character (not a special character as “!@#$%#^”):

sRregexpRreplacementRg

and with “r” lower case (you see not so readable, but possible!)

srregexprreplacementrg

Here are the examples:

sed 's@else@elllllse@g' test.php
sed 's#else#elllllse#g' test.php
sed 's:else:elllllse:g' test.php
sed 's~else~elllllse~g' test.php
sed 's!else!elllllse!g' test.php
sed 'spelsepelllllsepg' test.php
sed 'sRelseRelllllseRg' test.php
#could be paired with "-i", too
sed 'spelsepelllllsepg' -i test.php
sed 'sRelseRelllllseRg' -i test.php

What does it mean to you? The simple implication is you are not forced to escape characters in your regexp and replacement part. Consider you want to replace part of a unix/linux path string: /home/myuser/Desktop/mydirectory1/myfile.log if you use the default “/” you MUST escape all the “/” in your string:

sed 's/\/home\/myuser\/Desktop\/mydirectory1\/myfile.log/\/home\/user\/Desktop\/mydirectory2\/myfile.log/g' test.log

versus the simpler and more readable version with “#”

sed 's#/home/myuser/Desktop/mydirectory1/myfile.log#/home/user/Desktop/mydirectory2/myfile.log#g' test.log

And consider you use an variable:

cat file.test | sed "s/\[version\]/${PKGVERSION}/g"

* additional explanations:

  • /g (or what ever character is used for delimiter like “@”, “:”, “~” and so on) is for “Apply the replacement to all matches to the regexp, not just the first.”
  • -i (used in some of the examples above) is for inline replacement – the file you add in the sed command will be modified and the replacement will be saved in the file (the default behavior is to show the modified output in the standard output – console output)

Clear or delete systemd logs

Systemd linux distros use Journald service to collect and store logs in the system. Here are a couple of tips if you have problems with the space they occupy. It is good that all systemd linux distros support it – CentOS 7, Ubuntu 16+, Fedora, OpenSuse and so on.

TIP 1) Remove the old archive logs older than 10 days with

Time based removal of old logs. It will remove the old files. This command won’t change the configuration, so it just has a temporary effect.

journalctl --vacuum-time=10d

TIP 2) Remove the old archive logs greater than 1G

Size based removal of old logs. It will reduce the size of the logs to this specified size. This command won’t change the configuration, so it just has a temporary effect.

journalctl --vacuum-size=1024M

TIP 3) Show disk usage

[root@srv ~]# journalctl --disk-usage
Archived and active journals take up 785.5M on disk.

TIP 4) Show all logs and information for them

Where are the log files, the size they occupy, the time period of the entries in them and more:

[root@srv0 ~]# journalctl --header
File Path: /run/log/journal/bb5aa69bfa2b483386443ede7a92a45a/system.journal
File ID: 7deaff4610a94c82aab85386597e825b
Machine ID: bb5aa69bfa2b483386443ede7a92a45a
Boot ID: e89507fa3f814b8a96f9d70914c120b0
Sequential Number ID: 541a59d9a68342d3980d86e565a48c7d
State: ONLINE
Compatible Flags:
Incompatible Flags: COMPRESSED-XZ
Header size: 240
Arena size: 102956816
Data Hash Table Size: 178744
Field Hash Table Size: 333
Rotate Suggested: no
Head Sequential Number: 1239405
Tail Sequential Number: 1341511
Head Realtime Timestamp: mon 2018-06-25 10:09:09 UTC
Tail Realtime Timestamp: tue 2018-06-28 00:07:10 UTC
Tail Monotonic Timestamp: 1month 2d 21h 6min 47.287s
Objects: 258136
Entry Objects: 102107
Data Objects: 129585
Data Hash Table Fill: 72.5%
Field Objects: 36
Field Hash Table Fill: 10.8%
Tag Objects: 0
Entry Array Objects: 26406
Disk usage: 98.1M

File Path: /run/log/journal/bb5aa69bfa2b483386443ede7a92a45a/system@541a59d9a68342d3980d86e565a48c7d-000000000011512d-00056f3f3ff56172.journal
File ID: a8e1f042bc144df78f37005b0b555a82
Machine ID: bb5aa69bfa2b483386443ede7a92a45a
Boot ID: e89507fa3f814b8a96f9d70914c120b0
Sequential Number ID: 541a59d9a68342d3980d86e565a48c7d
State: ARCHIVED
Compatible Flags:
Incompatible Flags: COMPRESSED-XZ
Header size: 240
Arena size: 102956816
Data Hash Table Size: 178744
Field Hash Table Size: 333
Rotate Suggested: no
Head Sequential Number: 1134893
Tail Sequential Number: 1239404
Head Realtime Timestamp: fri 2018-06-22 18:32:10 UTC
Tail Realtime Timestamp: mon 2018-06-25 10:09:09 UTC
Tail Monotonic Timestamp: 1month 7h 8min 45.991s
Objects: 263445
Entry Objects: 104512
Data Objects: 131953
Data Hash Table Fill: 73.8%
Field Objects: 34
Field Hash Table Fill: 10.2%
Tag Objects: 0
Entry Array Objects: 26944
Disk usage: 98.1M

File Path: /run/log/journal/bb5aa69bfa2b483386443ede7a92a45a/system@541a59d9a68342d3980d86e565a48c7d-00000000000fc083-00056f0d6ef70320.journal
File ID: 007272b1f181487d83116bee96c40c30
Machine ID: bb5aa69bfa2b483386443ede7a92a45a
Boot ID: e89507fa3f814b8a96f9d70914c120b0
Sequential Number ID: 541a59d9a68342d3980d86e565a48c7d
State: ARCHIVED
Compatible Flags:
Incompatible Flags: COMPRESSED-XZ
Header size: 240
Arena size: 102956816
Data Hash Table Size: 178744
Field Hash Table Size: 333
Rotate Suggested: no
Head Sequential Number: 1032323
Tail Sequential Number: 1134892
Head Realtime Timestamp: wed 2018-06-20 07:06:10 UTC
Tail Realtime Timestamp: fri 2018-06-22 18:32:10 UTC
Tail Monotonic Timestamp: 4w 2h 1min 46.980s
Objects: 263998
Entry Objects: 102570
Data Objects: 133456
Data Hash Table Fill: 74.7%
Field Objects: 37
Field Hash Table Fill: 11.1%
Tag Objects: 0
Entry Array Objects: 27933
Disk usage: 98.1M

File Path: /run/log/journal/bb5aa69bfa2b483386443ede7a92a45a/system@541a59d9a68342d3980d86e565a48c7d-00000000000e3f67-00056ee09376d287.journal
File ID: 4c268268a6e34d6297c7ae9ca01fc31b
Machine ID: bb5aa69bfa2b483386443ede7a92a45a
Boot ID: e89507fa3f814b8a96f9d70914c120b0
Sequential Number ID: 541a59d9a68342d3980d86e565a48c7d
State: ARCHIVED
Compatible Flags:
Incompatible Flags: COMPRESSED-XZ
Header size: 240
Arena size: 102956816
Data Hash Table Size: 178744
Field Hash Table Size: 333
Rotate Suggested: yes
Head Sequential Number: 933735
Tail Sequential Number: 1032322
Head Realtime Timestamp: mon 2018-06-18 01:35:09 UTC
Tail Realtime Timestamp: wed 2018-06-20 07:06:10 UTC
Tail Monotonic Timestamp: 3w 4d 14h 35min 47.248s
Objects: 261498
Entry Objects: 98588
Data Objects: 134059
Data Hash Table Fill: 75.0%
Field Objects: 40
Field Hash Table Fill: 12.0%
Tag Objects: 0
Entry Array Objects: 28809
Disk usage: 98.1M

File Path: /run/log/journal/bb5aa69bfa2b483386443ede7a92a45a/system@541a59d9a68342d3980d86e565a48c7d-00000000000cbf3b-00056eb3ea255b2a.journal
File ID: 7019a721bebe4e00b76410a6e7052c6d
Machine ID: bb5aa69bfa2b483386443ede7a92a45a
Boot ID: e89507fa3f814b8a96f9d70914c120b0
Sequential Number ID: 541a59d9a68342d3980d86e565a48c7d
State: ARCHIVED
Compatible Flags:
Incompatible Flags: COMPRESSED-XZ
Header size: 240
Arena size: 102956816
Data Hash Table Size: 178744
Field Hash Table Size: 333
Rotate Suggested: yes
Head Sequential Number: 835387
Tail Sequential Number: 933734
Head Realtime Timestamp: fri 2018-06-15 20:18:10 UTC
Tail Realtime Timestamp: mon 2018-06-18 01:35:09 UTC
Tail Monotonic Timestamp: 3w 2d 9h 4min 45.972s
Objects: 260794
Entry Objects: 98348
Data Objects: 134060
Data Hash Table Fill: 75.0%
Field Objects: 33
Field Hash Table Fill: 9.9%
Tag Objects: 0
Entry Array Objects: 28351
Disk usage: 98.1M

File Path: /run/log/journal/bb5aa69bfa2b483386443ede7a92a45a/system@541a59d9a68342d3980d86e565a48c7d-00000000000b2fac-00056e827d3375dd.journal
File ID: 61c16e8acc364d97b8c0c7cc2afcb6ec
Machine ID: bb5aa69bfa2b483386443ede7a92a45a
Boot ID: e89507fa3f814b8a96f9d70914c120b0
Sequential Number ID: 541a59d9a68342d3980d86e565a48c7d
State: ARCHIVED
Compatible Flags:
Incompatible Flags: COMPRESSED-XZ
Header size: 240
Arena size: 102956816
Data Hash Table Size: 178744
Field Hash Table Size: 333
Rotate Suggested: no
Head Sequential Number: 733100
Tail Sequential Number: 835386
Head Realtime Timestamp: wed 2018-06-13 09:20:08 UTC
Tail Realtime Timestamp: fri 2018-06-15 20:18:10 UTC
Tail Monotonic Timestamp: 3w 3h 47min 46.827s
Objects: 264298
Entry Objects: 102287
Data Objects: 134043
Data Hash Table Fill: 75.0%
Field Objects: 33
Field Hash Table Fill: 9.9%
Tag Objects: 0
Entry Array Objects: 27933
Disk usage: 98.1M

File Path: /run/log/journal/bb5aa69bfa2b483386443ede7a92a45a/system@541a59d9a68342d3980d86e565a48c7d-000000000009966a-00056e4cbbb6ebfc.journal
File ID: c90df7bdc4654ab7a4ac955c74a779a3
Machine ID: bb5aa69bfa2b483386443ede7a92a45a
Boot ID: e89507fa3f814b8a96f9d70914c120b0
Sequential Number ID: 541a59d9a68342d3980d86e565a48c7d
State: ARCHIVED
Compatible Flags:
Incompatible Flags: COMPRESSED-XZ
Header size: 240
Arena size: 102956816
Data Hash Table Size: 178744
Field Hash Table Size: 333
Rotate Suggested: no
Head Sequential Number: 628330
Tail Sequential Number: 733099
Head Realtime Timestamp: sun 2018-06-10 17:12:09 UTC
Tail Realtime Timestamp: wed 2018-06-13 09:19:10 UTC
Tail Monotonic Timestamp: 2w 4d 16h 48min 46.993s
Objects: 263295
Entry Objects: 104770
Data Objects: 131816
Data Hash Table Fill: 73.7%
Field Objects: 37
Field Hash Table Fill: 11.1%
Tag Objects: 0
Entry Array Objects: 26670
Disk usage: 98.1M

File Path: /run/log/journal/bb5aa69bfa2b483386443ede7a92a45a/system@541a59d9a68342d3980d86e565a48c7d-000000000007fd20-00056e16f3135f30.journal
File ID: 32915d651dd84728b9e4a33a97b480cf
Machine ID: bb5aa69bfa2b483386443ede7a92a45a
Boot ID: e89507fa3f814b8a96f9d70914c120b0
Sequential Number ID: 541a59d9a68342d3980d86e565a48c7d
State: ARCHIVED
Compatible Flags:
Incompatible Flags: COMPRESSED-XZ
Header size: 240
Arena size: 102956816
Data Hash Table Size: 178744
Field Hash Table Size: 333
Rotate Suggested: no
Head Sequential Number: 523552
Tail Sequential Number: 628329
Head Realtime Timestamp: fri 2018-06-08 01:02:10 UTC
Tail Realtime Timestamp: sun 2018-06-10 17:12:09 UTC
Tail Monotonic Timestamp: 2w 2d 41min 46.200s
Objects: 263287
Entry Objects: 104778
Data Objects: 131696
Data Hash Table Fill: 73.7%
Field Objects: 36
Field Hash Table Fill: 10.8%
Tag Objects: 0
Entry Array Objects: 26775
Disk usage: 98.1M
[root@srv0 ~]#

* Deleting logs

[root@srv0 ~]# journalctl --vacuum-size=128M
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a33241-000570199db5be3c.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a34463-0005701a0b24d0fc.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a3568c-0005701a79e388c7.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a36899-0005701ae529f439.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a37ac8-0005701b50781f62.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a38cde-0005701bbd3b60c3.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a39ef6-0005701c28dcf40e.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a3b0f1-0005701c9416ee94.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a3c309-0005701cffe19015.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a3d521-0005701d6c79b9cb.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a3e748-0005701dd7c60e79.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a3f92d-0005701e48413eb8.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a40b0a-0005701ec83a0c74.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a41ce2-0005701f3fdcadc6.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a42f04-0005701fabfefbca.journal (8.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a4410e-000570201757a256.journal (120.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a60a8f-0005702ac025bb0c.journal (120.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a7d254-000570359f2bd7eb.journal (120.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000a99a34-000570405b5e812e.journal (120.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000ab639b-0005704b05553c7d.journal (120.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000ad2c3e-00057055cb403fae.journal (120.0M).
Deleted archived journal /var/log/journal/9be717e698354ec481abb641cf4085c3/system@79d0440cc1174c2db132b707a0567bcb-0000000000aef5c8-000570607686fd78.journal (120.0M).
Vacuuming done, freed 960.0M of archived journals from /var/log/journal/9be717e698354ec481abb641cf4085c3.

Update supermicro server’s firmware BIOS under linux with the SUM cli

The newer Supermicro motherboards have the ability to update the system BIOS from IPMI Web management or with a Supermicro tool called

“Supermicro Update Manager (SUM)”

This tool consists of a linux cli and it works on most of the X9/X10/X11 Supermicro systems. If you have one of these motherboards you probably could update your BIOS under linux console and throwing away your freedos cd prehistoric update process (probably coming soon). If you’ve used Supermicro with for ages you probably are aware of the problem with the updating the BIOS, their tool is an old DOS flash utility, which could be used under MS Windows and with linux servers we got a problem! But not any more! Recent motherboards with built-in IPMI modules have “BIOS Update” option in the web interface (under Maintenance menu), but you need a license (which by the way is not expensive).

main menu
BIOS Update

So if you happen to have such server you could give a try to SUM linux cli (yes they made a linux cli and even a freebsd one!). With the SUM cli you could do more than just update the BIOS (which is pretty important) here are the functions you can do Key Management, System Checks, BIOS Management, BMC Management, System Event Log, CMM Management, Storage Management, Applications (through the network) and for some of them you still need a license, but for BIOS update you do not need if you do it as Supermicro says

In-Band

which basically means from the server you want to update (or in general use it). KEEP IN MIND this method will reset your BIOS options to DEFAULTS!!! In fact you need a license to use preserve settings you can see the output of the SUM help for the command UpdateBios. So save your changes to recover them after the update!
And here we present a BIOS update with SUM on one of our Supermicro servers with motherboard X11SSV-M4F
So the BIOS version was 1.0 reported by lshw:

[srv@local ~]# lshw|head -n 25
srv@local
    description: System
    product: Super Server (To be filled by O.E.M.)
    vendor: Supermicro
    version: 0123456789
    serial: 0123456789
    width: 64 bits
    capabilities: smbios-3.0 dmi-3.0 smp vsyscall32
    configuration: boot=normal chassis=server family=To be filled by O.E.M. sku=To be filled by O.E.M. uuid=00000000-0000-0000-0000-111111111111
  *-core
       description: Motherboard
       product: X11SSV-M4F
       vendor: Supermicro
       physical id: 0
       version: 1.02
       serial: 112233000044
       slot: To be filled by O.E.M.
     *-firmware
          description: BIOS
          vendor: American Megatrends Inc.
          physical id: 0
          version: 1.0
          date: 10/18/2016
          size: 64KiB
          capacity: 15MiB

And here are the steps to do:

STEP 1) Download the SUM cli – Supermicro Update Manager and unpack it in your server

You could download freely the SUM version 2 from here: https://www.supermicro.com/solutions/SMS_SUM.cfm (this link explains what the tool is used for) at the bottom of the page there is a link to download the SUM – https://www.supermicro.com/SwDownload/UserInfo.aspx?sw=0&cat=SUM Here you should fill the form with your name, company and email address and then you will be redirected to the download page, which at present is like the screenshot below:

main menu
Supermicro Update Manager (SUM)

When downloaded the linux version you would have the following files in the archive file:

[srv@local ~]# cd
[srv@local ~]# tar xzvf sum_2.0.0_Linux_x86_64_20171108.tar.gz
sum_2.0.0_Linux_x86_64/
sum_2.0.0_Linux_x86_64/ReleaseNote.txt
sum_2.0.0_Linux_x86_64/sum
sum_2.0.0_Linux_x86_64/ExternalData/
sum_2.0.0_Linux_x86_64/ExternalData/VENID.txt
sum_2.0.0_Linux_x86_64/ExternalData/SMCIPID.txt
sum_2.0.0_Linux_x86_64/driver/
sum_2.0.0_Linux_x86_64/driver/RHL4_x86_64/
sum_2.0.0_Linux_x86_64/driver/RHL4_x86_64/sum_bios.ko
sum_2.0.0_Linux_x86_64/driver/RHL6_x86_64/
sum_2.0.0_Linux_x86_64/driver/RHL6_x86_64/sum_bios.ko
sum_2.0.0_Linux_x86_64/driver/RHL5_x86_64/
sum_2.0.0_Linux_x86_64/driver/RHL5_x86_64/sum_bios.ko
sum_2.0.0_Linux_x86_64/driver/RHL7_x86_64/
sum_2.0.0_Linux_x86_64/driver/RHL7_x86_64/sum_bios.ko
sum_2.0.0_Linux_x86_64/SUM_UserGuide.pdf

The “sum” file binary is the tool you need.

STEP 2) Download the new motherboard BIOS firmware

, which for our board (X11SSV-M4F – https://www.supermicro.com/products/motherboard/Xeon/C236_C232/X11SSV-M4F.cfm) it was version 1.1 with filename “X11SVMF8_308.zip”, unpack the file under X11SVMF8_308

[srv@local ~]# cd
[srv@local ~]# unzip X11SVMF8_308.zip
Archive:  X11SVMF8_308.zip
   creating: X11SVMF8.308/
  inflating: X11SVMF8.308/AFUDOSU.SMC  
  inflating: X11SVMF8.308/CHOICE.SMC  
  inflating: X11SVMF8.308/FDT.smc    
  inflating: X11SVMF8.308/FLASH.BAT  
  inflating: X11SVMF8.308/Readme for UP X11 AMI  BIOS.txt  
  inflating: X11SVMF8.308/X11SVMF8.308

The file “X11SVMF8.308” is the BIOS firmware of the motherboard. As you can see the prehistoric DOS executable flash utility is still distributed and is supported method of updating.

STEP 3) Update the BIOS

[srv@local ~]# cd /root/sum_2.0.0_Linux_x86_64
[srv@local ~]# ./sum -c UpdateBios --file ../X11SVMF8.308/X11SVMF8.308 
Supermicro Update Manager (for UEFI BIOS) 2.0.0 (2017/11/08) (x86_64)
Copyright©2017 Super Micro Computer, Inc. All rights reserved
Reading BIOS flash ..................... (100%)
Checking BIOS ID ...
Checking ME Firmware ...
Comparing FDT for ROM file and flash.... (100%)

***************************<<<<<CRITICAL WARNING>>>>>***************************

ExitCode                = 254
Description             = Manual steps are required
Program Error Code      = 119.18
Error message:
    FDT is different. Please use system reboot(do not shutdown 
    or poweroff system) command to force ME enter manufacturing mode 
    and run UpdateBIOS command again to update BIOS and ME region.

********************************************************************************
[srv@local ~]# reboot

As you can see we got critical warning! You may not have the critical, but if you do you need to run the command second time to really flash the new BIOS firmware. So here it is, AFTER rebooting your server login again and execute the command again:

[srv@local ~]# cd /root/sum_2.0.0_Linux_x86_64
[srv@local ~]# ./sum -c UpdateBios --file ../X11SVMF8.308/X11SVMF8.308 
Supermicro Update Manager (for UEFI BIOS) 2.0.0 (2017/11/08) (x86_64)
Copyright©2017 Super Micro Computer, Inc. All rights reserved
Reading BIOS flash ..................... (100%)
Checking BIOS ID ...
Programming BIOS and ME (including FDT)
Writing BIOS flash ..................... (100%)
Verifying BIOS flash ................... (100%)
Checking ME Firmware ...
Putting ME data to BIOS ................ (100%)
Writing ME region in BIOS flash ...
 - Update success for FDR
 - Updated Recovery Loader to OPRx
 - Updated FPT, MFSB, FTPR and MFS
 - ME Entire Image done
WARNING:Must power cycle or restart the system for the changes to take effect!
[srv@local ~]# reboot

And there you have it you updated the BIOS of your server successfully. KEEP IN MIND the BIOS settings are reset to Defaults! When you restart the server the second time (if you get the critical warning or the first time if you do not) you should load the optimized defaults and change your settings according your needs. Go to BIOS and load the optimized defaults and change the settings according your needs (or your backup).

[srv@local ~]# lshw|head -n 25
srv@local
    description: System
    product: Super Server (To be filled by O.E.M.)
    vendor: Supermicro
    version: 0123456789
    serial: 0123456789
    width: 64 bits
    capabilities: smbios-3.0 dmi-3.0 smp vsyscall32
    configuration: boot=normal chassis=server family=To be filled by O.E.M. sku=To be filled by O.E.M. uuid=00000000-0000-0000-0000-111111111111
  *-core
       description: Motherboard
       product: X11SSV-M4F
       vendor: Supermicro
       physical id: 0
       version: 1.02
       serial: 112233000044
       slot: To be filled by O.E.M.
     *-firmware
          description: BIOS
          vendor: American Megatrends Inc.
          physical id: 0
          version: 1.1
          date: 03/08/2018
          size: 64KiB
          capacity: 15MiB

* SUM cli – UpdateBios help output

[srv@local ~]# ./sum -h -c UpdateBios
Supermicro Update Manager (for UEFI BIOS) 2.0.0 (2017/11/08) (x86_64)
Copyright©2017 Super Micro Computer, Inc. All rights reserved
Description
    Updates BIOS with the given image file.
Required Arguments
    --file    <file name>
Optional Arguments
    --reboot
          Forces the managed system to reboot or power up after operation.
    --flash_smbios
          Overwrites the SMBIOS data
    --preserve_nv
          Preserves the NVRAM region
    --preserve_mer
          Preserves the ME firmware region
    --preserve_setting
          Preserves setting configurations
Usage Modes
    [OOB] [In-Band] [Multiple systems OOB] 
Node Product Key Required
     No for [In-Band]
    Yes for [OOB]
Examples
OOB
  # ./sum -i 192.168.34.56 -u ADMIN -p ADMIN -c UpdateBios --file BIOS.rom 
    --reboot
In-Band
  # ./sum -c UpdateBios --file BIOS.rom --reboot
Multiple systems OOB
  # ./sum -l IP_ADDR_RANGE.txt -u ADMIN -p ADMIN -c UpdateBios --file BIOS.rom 
    --reboot
Notice
    1. For [OOB] and [Multiple systems OOB] usage modes, before executing this 
    command, it is recommended to shutdown the managed system first.
    2. --preserve_setting option is only supported in Purley and the platforms 
    of later versions. Note that --preserve_setting option for in-band usage 
    requires "SFT-OOB-LIC" product key. The preserved setting configurations 
    will be listed in preserved_settings.log.

* SUM cli generic help output


[srv@local ~]# ./sum 
Supermicro Update Manager (for UEFI BIOS) 2.0.0 (2017/11/08) (x86_64)
Copyright©2017 Super Micro Computer, Inc. All rights reserved

NAME
  sum (Supermicro Update Manager)

SYNOPSIS
  sum [OPTIONs] [COMMAND] [COMMAND ARGUMENTS]

OPTIONS
  -h  Shows help information.
  -v  Displays the verbose output.
  -i  <BMC/CMM IP address or BMC/CMM host name>
  -l  <BMC/CMM system list file name. Refer to the user's guide for formatting>
  -u  <BMC/CMM user ID>
  -p  <BMC/CMM user password>
  -c  <command name> (case insensitive)

USAGE MODES
○  Single System Out-Of-Band (OOB) Management [operates on single BMC/CMM]: 
    Must use -i,-u, -p options
○  Single System In-Band Management [operates on local OS]: Do not use -i, -u 
    and -p options
○  Concurrent Systems OOB Management [operates on multiple system BMCs/CMMs]: 
    Replace -i option with -l option

COMMANDS
Function Group             Command Names

Key Management             ActivateProductKey, QueryProductKey, ClearProductKey
System Checks              CheckOOBSupport, CheckAssetInfo, 
                           CheckSystemUtilization, CheckSensorData
BIOS Management            GetBIOSInfo, UpdateBios, GetDefaultBiosCfg, 
                           GetCurrentBiosCfg, ChangeBiosCfg, 
                           LoadDefaultBiosCfg, GetDmiInfo, ChangeDmiInfo, 
                           EditDmiInfo, SetBiosAction
BMC Management             GetBmcInfo, UpdateBmc, GetBmcCfg, ChangeBmcCfg
System Event Log           GetEventLog, ClearEventLog
CMM Management             GetCmmInfo, UpdateCmm, GetCmmCfg, ChangeCmmCfg
Storage Management         GetRaidControllerInfo, UpdateRaidController, 
                           GetRaidCfg, ChangeRaidCfg, GetSataInfo, GetNvmeInfo
Applications               TpmProvision, MountIsoImage, UnmountIsoImage

COMMAND USAGE
  See help message for each command
  Syntax:"  # ./sum -h -c <command name>"
  Notes: 1)Command support is platform dependent. Please refer to Appendix C in 
         the user's guide for platform dependency hints.
         2)If BMC/CMM user ID or password includes special characters, it has 
         to be quoted.

EXAMPLES
OOB
  # ./sum -i 192.168.34.56 -u ADMIN -p ADMIN -c ChangeBmcCfg --file BmcCfg.txt
  # ./sum -i 192.168.34.56 -u ADMIN -p "&123456" -c ChangeBmcCfg --file 
  BmcCfg.txt
Multiple systems OOB
  # ./sum -l IP_ADDR_RANGE.txt -u ADMIN -p ADMIN -c GetBIOSInfo --file BIOS.rom
  # ./sum -l IP_ADDR_RANGE.txt -u ADMIN -p "&123456" -c GetBIOSInfo --file 
  BIOS.rom
In-Band
  # ./sum -c UpdateBios --file BIOS.rom
Help Message
  # ./sum -h -c UpdateBios

Backup and restore your Groestlcoin address wallet (cli)

In real world backups are lifesavers and in crypto world the backups are even more important! Backup everything about your crypto wallet and node install!
If you have followed our howtos (Running a Groestlcoin node (wallet cli) from source under Ubuntu 16 LTS and “Building from source a Groestlcoin node (cli only) under Ubuntu 16 LTS“) you would have the correct software for managing the Groestlcoin wallet and all the paths bellow will be accurate.

STEP 1) Backup of Groestlcoin wallet

If you want to backup up your Groestlcoin (addresses) wallet you need to find your

wallet.dat

file the place for it is in your

“home directory/.groestlcoin/wallet.dat”

So first stop the Groestlcoin Core program with one of the following command:

  • By sending kill signal:
    srv@local:~$ killall groestlcoind
    
  • OR in your screen or shell of the running program ctrl+c will stop it

After you wait for the Groestlcoin Core to exit you can check the logs in

~/.groestlcoin/debug.log

2018-04-12 01:00:36 UpdateTip: new best=0000000000026458ea4ffb8d781179393f9f339bf3504936d1a6eb05d1a6d433 height=2041250 version=0x20000000 log2_work=61.378625 tx=2730651 date='2018-04-12 01:00:16' progress=1.000000 cache=0.7MiB(2279tx)
2018-04-12 01:00:52 tor: Thread interrupt
2018-04-12 01:00:52 msghand thread exit
2018-04-12 01:00:52 addcon thread exit
2018-04-12 01:00:52 torcontrol thread exit
2018-04-12 01:00:52 opencon thread exit
2018-04-12 01:00:52 scheduler thread interrupt
2018-04-12 01:00:52 Shutdown: In progress...
2018-04-12 01:00:52 net thread exit
2018-04-12 01:00:52 Dumped mempool: 3e-06s to copy, 0.001741s to dump
2018-04-12 01:00:52 Shutdown: done

So now you can copy to a secure place your

“home directory/.groestlcoin/wallet.dat

In our real world example the path is “/home/ubuntu/.groestlcoin/wallet.dat”

srv@local:~$ cp /home/ubuntu/.groestlcoin/wallet.dat /home/ubuntu/backups/cryptos/groestlcoin-wallet.dat

STEP 2) Restore Groestlcoin wallet

To restore our wallet from a backup you also need the Groestlcoin wallet program (Groestlcoin Core – the Groestlcoin node) not to be running, so if it is started just follow the STEP 1) to stop it. Then override

“home directory/.groestlcoin/wallet.dat

with your backup file (the name of the file must be “wallet.dat”!!! It is important because your backup file could have any name). So in our real world example we override our /home/ubuntu/.groestlcoin/wallet.dat with our backup:

srv@local:~$ cp /home/ubuntu/backups/cryptos/groestlcoin-wallet.dat /home/ubuntu/.groestlcoin/wallet.dat

And then start your Groestlcoin wallet program with option

-rescan

this option is required when you first start the Groestlcoin Core with your backup wallet to “Rescan the block chain for missing wallet transactions on startup”, if you do not start the program with “-rescan” you could have strange numbers for your funds when checking with “groestlcoin-cli”

srv@local:~$ cd ~/groestlcoin-core/bin
srv@local:~/groestlcoin-core/bin$ ./groestlcoind -rescan &> groestlcoind.log

You could check debug.log and you’ll see the transactions for your wallet

2018-04-12 01:21:07 Using obfuscation key for /home/ubuntu/.groestlcoin/blocks/index: 0000000000000000
2018-04-12 01:21:07 Opening LevelDB in /home/ubuntu/.groestlcoin/chainstate
2018-04-12 01:21:07 Opened LevelDB successfully
2018-04-12 01:21:07 Using obfuscation key for /home/ubuntu/.groestlcoin/chainstate: 0000000000000000
2018-04-12 01:21:26 LoadBlockIndexDB: last block file = 8
2018-04-12 01:21:26 LoadBlockIndexDB: last block file info: CBlockFileInfo(blocks=75749, size=48230812, heights=1965243...2041250, time=2018-02-15...2018-04-12)
2018-04-12 01:21:26 Checking all blk files are present...
2018-04-12 01:21:26 LoadBlockIndexDB: transaction index disabled
2018-04-12 01:21:27 LoadBlockIndexDB: hashBestChain=0000000000026458ea4ffb8d781179393f9f339bf3504936d1a6eb05d1a6d433 height=2041250 date=2018-04-12 01:00:16 progress=0.999999
2018-04-12 01:21:27 init message: Rewinding blocks...
2018-04-12 01:21:34 init message: Verifying blocks...
2018-04-12 01:21:34 Verifying last 6 blocks at level 3
2018-04-12 01:21:34 [0%]...[16%]...[33%]...[50%]...[66%]...[83%]...[99%]...[DONE].
2018-04-12 01:21:34 No coin database inconsistencies in last 7 blocks (16 transactions)
2018-04-12 01:21:34  block index           26840ms
2018-04-12 01:21:34 init message: Loading wallet...
2018-04-12 01:21:34 nFileVersion = 2130300
2018-04-12 01:21:34 Keys: 0 plaintext, 205 encrypted, 205 w/ metadata, 205 total
2018-04-12 01:21:34  wallet                   11ms
2018-04-12 01:21:34 init message: Rescanning...
2018-04-12 01:21:34 Rescanning last 2041250 blocks (from block 0)...
2018-04-12 01:21:34 AddToWallet c5ed5ff668503412eed4568c3b226523e2ff6db2a1b3740f0aea5250a3c36e7b  
2018-04-12 01:21:34 AddToWallet fc99017780dbafaf5723196351d4adaaee9991c35391ecb013ed74bbb57a44a5  
2018-04-12 01:21:34 AddToWallet 52f883907385dd8205273ebdc987e88ed71f0e894b57df1a6a2f2c9fcb546922  
2018-04-12 01:21:34 AddToWallet a8b84a2d0b1114c4f2d710a45e0e13dfab547512b1b775a9617fa41809b75926  
2018-04-12 01:21:34 AddToWallet 0d4f1d8e9f6c42b4dbaaf33fe4fb33efc5f646df8724f1e66ab54ccbedbb84f1  
2018-04-12 01:21:34 AddToWallet 1a2984f011a6ff5d44c549b0f6da44b3a1654e2ccbb9f897f5106f88ed931498  
.....
.....
2018-04-12 01:21:46  rescan                12622ms
2018-04-12 01:21:46 setKeyPool.size() = 99
2018-04-12 01:21:46 mapWallet.size() = 415
2018-04-12 01:21:46 mapAddressBook.size() = 4
2018-04-12 01:21:46 mapBlockIndex.size() = 2041278
2018-04-12 01:21:46 nBestHeight = 2041250
2018-04-12 01:21:46 init message: Loading addresses...
2018-04-12 01:21:46 Imported mempool transactions from disk: 1 successes, 0 failed, 0 expired
2018-04-12 01:21:46 torcontrol thread start
2018-04-12 01:21:46 Loaded 2994 addresses from peers.dat  40ms
2018-04-12 01:21:46 init message: Loading banlist...
2018-04-12 01:21:46 init message: Starting network threads...
2018-04-12 01:21:46 net thread start
2018-04-12 01:21:46 addcon thread start
2018-04-12 01:21:46 init message: Done loading
2018-04-12 01:21:46 dnsseed thread start
2018-04-12 01:21:46 opencon thread start
2018-04-12 01:21:46 msghand thread start
2018-04-12 01:21:47 receive version message: /Groestlcoin:2.13.3/: version 70015, blocks=2041268, us=18.220.186.120:42996, peer=0

Now if you check your balances they must be properly reported (correct numbers of coins):

srv@local:~/groestlcoin-core/bin$ ./groestlcoin-cli listaccounts
{
  "": 0.00000000,
  "myfunds": 527.36851543,
  "tests": 0.00000000
}

Reinstall live CentOS 7 server using ssh and change disk configuration of root filesystem to RAID1

Not all dedicated server providers have good web management panel or offer a remote management console (like IPMI/KVM, iDRAC, iLO and so on)! If you used multiple server providers you would experience the case when you received a server installed with the linux distro by your choice, but with no options to configure the hard drives setup. And in most cases when there is no choice of hard drives and partition configuration you end up with a dedicated server installed with root filesystem on the whole first device without any redundancy or performance. So it will be nice to reinstall the server without using remote management module (because it is missing, for example).
Here are the steps to reinstall a CentOS7 server with two hard drives, the initial installation uses the almost whole first device for root filesystem. At the end we will have the server with different hard drive configuration – root filesystem will be on a RAID1 device for redundancy (and read performance) and will have a dedicated space for it, there will be a bigger device for storage purposes.

Here are the steps to reinstall live CentOS 7 server using ssh and change disk configuration of root filesystem to RAID1:

STEP 1) Show the current configuration

[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       461G  1.5G  437G   1% /
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G     0   16G   0% /dev/shm
tmpfs            16G  8.5M   16G   1% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
/dev/sda1       485M  136M  324M  30% /boot
/dev/sda5       3.9G   17M  3.7G   1% /tmp
tmpfs           3.2G     0  3.2G   0% /run/user/0
[root@localhost ~]# ls -al /dev/sd?
brw-rw---- 1 root disk 8,  0 Apr  4 11:06 /dev/sda
brw-rw---- 1 root disk 8, 16 Apr  4 11:06 /dev/sdb
brw-rw---- 1 root disk 8, 32 Apr  4 11:06 /dev/sdc
brw-rw---- 1 root disk 8, 48 Apr  4 11:06 /dev/sdd
[root@localhost ~]# 

Root filesystem uses /dev/sda3, /tmp uses /dev/sda5 and the boot is on /dev/sda2. So the whole install uses only /dev/sda device and the other 3 are spare. We are going to use the second hard drive /dev/sdb to create a software RAID1 for our root filesystem.

STEP 2) Prepare the second drive for first reboot

Because /dev/sda is the first device the server will always boot from the grub installed in /dev/sda, so if we want to change the partition layout we must umount all partitions of /dev/sda, which is not a easy job. So because we have a second disk, we can change the partition layout of the second disk /dev/sdb, then copy the root filesystem from the first disk to the second and instruct the the grub to boot the root filesystem from the second disk. And more, at first we’ll use the partition for the swap of the second disk for root filesystem and then we’ll create the RAID1 device. Here we make initial setup of the second disk /dev/sdb:

[root@localhost ~]# parted /dev/sdb --script print
Model: ATA SanDisk SD6SB2M5 (scsi)
Disk /dev/sdb: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End  Size  Type  File system  Flags

[root@localhost ~]# parted /dev/sdb --script mklabel gpt
[root@localhost ~]# parted /dev/sdb --script mkpart primary 0% 4M
[root@localhost ~]# parted /dev/sdb --script mkpart primary 4M 16G
[root@localhost ~]# parted /dev/sdb --script mkpart primary 16G 50G
[root@localhost ~]# parted /dev/sdb --script mkpart primary 50G 100%
[root@localhost ~]# parted /dev/sdb --script set 1 bios_grub on
[root@localhost ~]# parted /dev/sdb --script print
Model: ATA SanDisk SD6SB2M5 (scsi)
Disk /dev/sdb: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  4194kB  3146kB               primary  bios_grub
 2      4194kB  16.0GB  16.0GB               primary
 3      16.0GB  50.0GB  34.0GB               primary
 4      50.0GB  512GB   462GB                primary

[root@localhost ~]# mkfs.ext4 /dev/sdb2
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done                            
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
977280 inodes, 3905280 blocks
195264 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
120 block groups
32768 blocks per group, 32768 fragments per group
8144 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

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

[root@localhost ~]#

STEP 3) Copy all the files from the current filesystem to the newly created one using rsync

[root@localhost ~]# mkdir /mnt/centos
[root@localhost ~]# mount /dev/sdb2 /mnt/centos/
[root@localhost ~]# rsync --delete --partial --verbose --progress --stats --recursive --times --perms --links --owner --group --hard-links --devices --exclude=/mnt --exclude=/proc --exclude=/sys / /mnt/centos/
...
...
Number of files: 81519
Number of files transferred: 60909
Total file size: 1483871491 bytes
Total transferred file size: 1460598076 bytes
Literal data: 1460598076 bytes
Matched data: 0 bytes
File list size: 1691669
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 1465598884
Total bytes received: 1734750

sent 1465598884 bytes  received 1734750 bytes  79315331.57 bytes/sec
total size is 1483871491  speedup is 1.01
[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       461G  1.5G  437G   1% /
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G     0   16G   0% /dev/shm
tmpfs            16G  8.5M   16G   1% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
/dev/sda1       485M  136M  324M  30% /boot
/dev/sda5       3.9G   17M  3.7G   1% /tmp
tmpfs           3.2G     0  3.2G   0% /run/user/0
/dev/sdb2        15G  1.6G   13G  12% /mnt/centos
[root@localhost ~]# 

STEP 4) Prepare the new root

  1. umount /boot, because we want to use it for the first reboot but with changed grub configuration, generated for the new root filesystem
    [root@localhost ~]# umount /boot
    [root@localhost ~]# mount /dev/sda1 /mnt/centos/boot
    [root@localhost ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda2       461G  1.5G  437G   1% /
    devtmpfs         16G     0   16G   0% /dev
    tmpfs            16G     0   16G   0% /dev/shm
    tmpfs            16G  8.6M   16G   1% /run
    tmpfs            16G     0   16G   0% /sys/fs/cgroup
    /dev/sda5       3.9G   17M  3.7G   1% /tmp
    tmpfs           3.2G     0  3.2G   0% /run/user/0
    /dev/sdb2        15G  1.6G   13G  12% /mnt/centos
    /dev/sda1       485M  136M  324M  30% /mnt/centos/boot
    
  2. chroot in the new root and replace the old GIUD with the new one for the root filesystem in /etc/fstab
    [root@localhost ~]# mkdir /mnt/centos/proc
    [root@localhost ~]# mkdir /mnt/centos/sys
    [root@localhost ~]# mount -o bind /proc /mnt/centos/proc
    [root@localhost ~]# mount -o bind /dev /mnt/centos/dev
    [root@localhost ~]# mount -o bind /sys /mnt/centos/sys
    [root@localhost ~]# chroot /mnt/centos/
    [root@localhost /]# blkid |grep sdb2
    /dev/sdb2: UUID="b829d6f1-ca0e-4939-8764-c329aee0a5b2" TYPE="ext4" PARTLABEL="primary" PARTUUID="b150c7cc-0557-4de9-bbc9-05ae54b9cec5" 
    [root@localhost /]# blkid |grep sda2
    /dev/sda2: UUID="b43edab7-8b2f-4047-9ca2-0f3e3ea24e0e" TYPE="ext4" 
    [root@localhost /]# sed -i "s/b43edab7-8b2f-4047-9ca2-0f3e3ea24e0e/b829d6f1-ca0e-4939-8764-c329aee0a5b2/g" /etc/fstab
    
  3. comment out the /tmp in /etc/fstab (and any other directory, which uses /dev/sda, remember after the reboot we will change the partition layout of /dev/sda, so we need not to use any partition from it)
    [root@localhost /]# cat /etc/fstab 
    
    #
    # /etc/fstab
    # Created by anaconda on Wed Apr  4 11:00:01 2018
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    UUID=b829d6f1-ca0e-4939-8764-c329aee0a5b2 /                       ext4    defaults        1 1
    UUID=9b98bd49-34bd-43a3-89b9-32c36df722b2 /boot                   ext2    defaults        1 2
    UUID=7f44f0b8-cbbe-4e70-a763-112675cf9a2c /tmp                    ext4    noexec,nosuid,nodev        1 2
    UUID=20c3afea-87ae-4716-8a65-323bd9e6eae6 swap                    swap    defaults        0 0
    [root@localhost /]# sed -i "s/UUID=7f44f0b8-cbbe-4e70-a763-112675cf9a2c/#UUID=7f44f0b8-cbbe-4e70-a763-112675cf9a2c/g" /etc/fstab 
    [root@localhost /]# cat /etc/fstab 
    
    #
    # /etc/fstab
    # Created by anaconda on Wed Apr  4 11:00:01 2018
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    UUID=b829d6f1-ca0e-4939-8764-c329aee0a5b2 /                       ext4    defaults        1 1
    UUID=9b98bd49-34bd-43a3-89b9-32c36df722b2 /boot                   ext2    defaults        1 2
    #UUID=7f44f0b8-cbbe-4e70-a763-112675cf9a2c /tmp                    ext4    noexec,nosuid,nodev        1 2
    UUID=20c3afea-87ae-4716-8a65-323bd9e6eae6 swap                    swap    defaults        0 0
    [root@localhost /]#
    
  4. Generate the new grub2 configuration (because you are in the chrooted new root and there you change the /etc/fstab, grub will use the new GUID for the filesystem)
    [root@localhost /]# grub2-mkconfig -o /boot/grub2/grub.cfg
    Generating grub configuration file ...
    Found linux image: /boot/vmlinuz-3.10.0-693.21.1.el7.x86_64
    Found initrd image: /boot/initramfs-3.10.0-693.21.1.el7.x86_64.img
    Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
    Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
    Found linux image: /boot/vmlinuz-0-rescue-3003b47aedb040f6baaf6fce8c6b8386
    Found initrd image: /boot/initramfs-0-rescue-3003b47aedb040f6baaf6fce8c6b8386.img
    done
    [root@localhost /]# exit
    exit
    [root@localhost ~]# umount /mnt/centos/boot
    [root@localhost ~]# umount /mnt/centos/proc
    [root@localhost ~]# umount /mnt/centos/sys
    [root@localhost ~]# umount /mnt/centos/dev
    [root@localhost ~]# umount /mnt/centos
    [root@localhost ~]# reboot
    Connection to srv closed by remote host.
    Connection to srv closed.
    

STEP 5) Prepare the two disks /dev/sda and /dev/sdb for RAID1 device

Unmount all devices of /dev/sda (such as swap, /boot). Then make a new partition layout for /dev/sda and tune the layout of /dev/sdb (we need the flag raid to be “on”)

[root@srv0 ~]# ssh srv
root@srv's password: 
Last login: Wed Apr  4 11:28:57 2018 from 192.168.0.110
[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2        15G  1.6G   13G  12% /
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G     0   16G   0% /dev/shm
tmpfs            16G  8.5M   16G   1% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
/dev/sda1       485M  136M  324M  30% /boot
tmpfs           3.2G     0  3.2G   0% /run/user/0
[root@localhost ~]# umount /boot
[root@localhost ~]# swapoff -a
[root@localhost ~]# ls -al /boot/
total 128020
dr-xr-xr-x  6 root root     4096 Apr  4 11:07 .
dr-xr-xr-x 17 root root     4096 Apr  4 12:25 ..
-rw-r--r--  1 root root   140971 Mar  7 19:16 config-3.10.0-693.21.1.el7.x86_64
-rw-r--r--  1 root root   140894 Aug 22  2017 config-3.10.0-693.el7.x86_64
drwxr-xr-x  3 root root     4096 Apr  4 11:00 efi
drwxr-xr-x  2 root root     4096 Apr  4 11:00 grub
drwx------  5 root root     4096 Apr  4 11:04 grub2
-rw-------  1 root root 53705597 Apr  4 11:02 initramfs-0-rescue-3003b47aedb040f6baaf6fce8c6b8386.img
-rw-------  1 root root 17881515 Apr  4 11:04 initramfs-3.10.0-693.21.1.el7.x86_64.img
-rw-------  1 root root 15956344 Apr  4 11:07 initramfs-3.10.0-693.21.1.el7.x86_64kdump.img
-rw-------  1 root root 17871068 Apr  4 11:04 initramfs-3.10.0-693.el7.x86_64.img
-rw-r--r--  1 root root   610968 Apr  4 11:01 initrd-plymouth.img
drwx------  2 root root     4096 Apr  4 11:00 lost+found
-rw-r--r--  1 root root   293361 Mar  7 19:18 symvers-3.10.0-693.21.1.el7.x86_64.gz
-rw-r--r--  1 root root   293027 Aug 22  2017 symvers-3.10.0-693.el7.x86_64.gz
-rw-------  1 root root  3237433 Mar  7 19:16 System.map-3.10.0-693.21.1.el7.x86_64
-rw-------  1 root root  3228420 Aug 22  2017 System.map-3.10.0-693.el7.x86_64
-rwxr-xr-x  1 root root  5877760 Apr  4 11:02 vmlinuz-0-rescue-3003b47aedb040f6baaf6fce8c6b8386
-rwxr-xr-x  1 root root  5917504 Mar  7 19:16 vmlinuz-3.10.0-693.21.1.el7.x86_64
-rw-r--r--  1 root root      171 Mar  7 19:16 .vmlinuz-3.10.0-693.21.1.el7.x86_64.hmac
-rwxr-xr-x  1 root root  5877760 Aug 22  2017 vmlinuz-3.10.0-693.el7.x86_64
-rw-r--r--  1 root root      166 Aug 22  2017 .vmlinuz-3.10.0-693.el7.x86_64.hmac
[root@localhost ~]# parted /dev/sda --script mklabel gpt
[root@localhost ~]# parted /dev/sda --script mkpart primary 0% 4M
[root@localhost ~]# parted /dev/sda --script mkpart primary 4M 16G
[root@localhost ~]# parted /dev/sda --script mkpart primary 16G 50G
[root@localhost ~]# parted /dev/sda --script mkpart primary 50G 100%
[root@localhost ~]# parted /dev/sda --script set 1 bios_grub on
[root@localhost ~]# parted /dev/sda --script set 2 raid on
[root@localhost ~]# parted /dev/sda --script set 3 raid on
[root@localhost ~]# parted /dev/sda --script set 4 raid on
[root@localhost ~]# parted /dev/sda --script print
Model: ATA SanDisk SD6SB2M5 (scsi)
Disk /dev/sda: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  4194kB  3146kB  ext2         primary  bios_grub
 2      4194kB  16.0GB  16.0GB               primary  raid
 3      16.0GB  50.0GB  34.0GB               primary  raid
 4      50.0GB  512GB   462GB                primary  raid

[root@localhost ~]# parted /dev/sdb --script print
Model: ATA SanDisk SD6SB2M5 (scsi)
Disk /dev/sdb: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  4194kB  3146kB               primary  bios_grub
 2      4194kB  16.0GB  16.0GB  ext4         primary
 3      16.0GB  50.0GB  34.0GB               primary
 4      50.0GB  512GB   462GB                primary

[root@localhost ~]# parted /dev/sdb --script set 3 raid on
[root@localhost ~]# parted /dev/sdb --script print
Model: ATA SanDisk SD6SB2M5 (scsi)
Disk /dev/sdb: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  4194kB  3146kB               primary  bios_grub
 2      4194kB  16.0GB  16.0GB  ext4         primary
 3      16.0GB  50.0GB  34.0GB               primary  raid
 4      50.0GB  512GB   462GB                primary

STEP 6) Create the RAID1 device and format the filesystem, then copy all files from the root file system to the RAID1 device /dev/md1 (mounted again in /mnt/centos)

[root@localhost ~]# mdadm --create --verbose --metadata=1.2 /dev/md1 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3
mdadm: size set to 33186816K
mdadm: array /dev/md1 started.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1] 
md1 : active raid1 sdb3[1] sda3[0]
      33186816 blocks super 1.2 [2/2] [UU]
      [==>..................]  resync = 10.8% (3602048/33186816) finish=2.4min speed=200113K/sec
      
unused devices: <none>
[root@localhost ~]# mkfs.ext4 /dev/md1
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done                            
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
977280 inodes, 3905280 blocks
195264 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
120 block groups
32768 blocks per group, 32768 fragments per group
8144 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   
[root@localhost ~]# mount /dev/md1 /mnt/centos/
[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2        15G  1.6G   13G  12% /
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G     0   16G   0% /dev/shm
tmpfs            16G  8.5M   16G   1% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
tmpfs           3.2G     0  3.2G   0% /run/user/0
/dev/md1         32G   49M   30G   1% /mnt/centos
[root@localhost ~]# rsync --delete --partial --verbose --progress --stats --recursive --times --perms --links --owner --group --hard-links --devices --exclude=/mnt --exclude=/proc --exclude=/sys / /mnt/centos/
sending incremental file list
./
.autorelabel
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1022/1024)
.readahead
      237849 100%   39.12MB/s    0:00:00 (xfer#2, to-check=1021/1024)
bin -> usr/bin
lib -> usr/lib
lib64 -> usr/lib64
sbin -> usr/sbin
....
....
Number of files: 81532
Number of files transferred: 60917
Total file size: 1484146321 bytes
Total transferred file size: 1460872926 bytes
Literal data: 1460872926 bytes
Matched data: 0 bytes
File list size: 1693018
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 1465875457
Total bytes received: 1734920

sent 1465875457 bytes  received 1734920 bytes  83863450.11 bytes/sec
total size is 1484146321  speedup is 1.01
[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2        15G  1.6G   13G  12% /
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G     0   16G   0% /dev/shm
tmpfs            16G  8.5M   16G   1% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
tmpfs           3.2G     0  3.2G   0% /run/user/0
/dev/md1         32G  1.6G   28G   6% /mnt/centos

STEP 7) Prepare the new root in the RAID1 device

chroot in the new place (/mnt/centos) and change the GUID of the root filesystem in /etc/fstab, comment the “/boot”, we will use /boot on our root filesystem (we can do it, because we have a separate boot grub partition, the first one, so our /boot could reside on a RAID device). Also add the configuration of the UUID array in /etc/default/grub to generate a proper grub2 configuration for the next boot.

[root@localhost ~]# mkdir -p /mnt/centos/proc
[root@localhost ~]# mkdir -p /mnt/centos/sys
[root@localhost ~]# mount -o bind /proc /mnt/centos/proc
[root@localhost ~]# mount -o bind /dev /mnt/centos/dev
[root@localhost ~]# mount -o bind /sys /mnt/centos/sys
[root@localhost ~]# chroot /mnt/centos/
[root@localhost /]# blkid |grep sdb2
/dev/sdb2: UUID="b829d6f1-ca0e-4939-8764-c329aee0a5b2" TYPE="ext4" PARTLABEL="primary" PARTUUID="b150c7cc-0557-4de9-bbc9-05ae54b9cec5" 
[root@localhost /]# blkid |grep md1
/dev/md1: UUID="38407879-7399-492c-bad6-d8a3ef0297d4" TYPE="ext4" 
[root@localhost /]# sed -i "s/b829d6f1-ca0e-4939-8764-c329aee0a5b2/38407879-7399-492c-bad6-d8a3ef0297d4/g" /etc/fstab 
[root@localhost /]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Wed Apr  4 11:00:01 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=38407879-7399-492c-bad6-d8a3ef0297d4 /                       ext4    defaults        1 1
UUID=9b98bd49-34bd-43a3-89b9-32c36df722b2 /boot                   ext2    defaults        1 2
#UUID=7f44f0b8-cbbe-4e70-a763-112675cf9a2c /tmp                    ext4    noexec,nosuid,nodev        1 2
UUID=20c3afea-87ae-4716-8a65-323bd9e6eae6 swap                    swap    defaults        0 0
[root@localhost /]# sed -i "s/UUID=9b98bd49-34bd-43a3-89b9-32c36df722b2/#UUID=9b98bd49-34bd-43a3-89b9-32c36df722b2/g" /etc/fstab 
[root@localhost /]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Wed Apr  4 11:00:01 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=38407879-7399-492c-bad6-d8a3ef0297d4 /                       ext4    defaults        1 1
#UUID=9b98bd49-34bd-43a3-89b9-32c36df722b2 /boot                   ext2    defaults        1 2
#UUID=7f44f0b8-cbbe-4e70-a763-112675cf9a2c /tmp                    ext4    noexec,nosuid,nodev        1 2
UUID=20c3afea-87ae-4716-8a65-323bd9e6eae6 swap                    swap    defaults        0 0
[root@localhost /]# mdadm -E /dev/sda3
/dev/sda3:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : e59b6269:7af24168:193c51d0:65b33fd9
           Name : localhost.localdomain:1  (local to host localhost.localdomain)
  Creation Time : Wed Apr  4 12:38:58 2018
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 66373632 (31.65 GiB 33.98 GB)
     Array Size : 33186816 (31.65 GiB 33.98 GB)
    Data Offset : 32768 sectors
   Super Offset : 8 sectors
   Unused Space : before=32616 sectors, after=0 sectors
          State : active
    Device UUID : 8ebd8e2d:aa01d194:55a51280:e4192e08

    Update Time : Wed Apr  4 12:44:00 2018
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : 3e7cfbb6 - correct
         Events : 18


   Device Role : Active device 0
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
[root@localhost /]# nano /etc/default/grub
[root@localhost /]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200"
GRUB_CMDLINE_LINUX="rd.md.uuid=e59b6269:7af24168:193c51d0:65b33fd9 crashkernel=auto console=ttyS0,115200"
GRUB_DISABLE_RECOVERY="true"
[root@localhost /]# mdadm --detail --scan >> /etc/mdadm.conf
[root@localhost /]# cat /etc/mdadm.conf
ARRAY /dev/md1 metadata=1.2 name=localhost.localdomain:1 UUID=e59b6269:7af24168:193c51d0:65b33fd9
[root@localhost /]# dracut --regenerate-all --force
[root@localhost /]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-693.21.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.21.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-3003b47aedb040f6baaf6fce8c6b8386
Found initrd image: /boot/initramfs-0-rescue-3003b47aedb040f6baaf6fce8c6b8386.img
done
[root@localhost /]# grub2-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
[root@localhost /]# grub2-install /dev/sdb
Installing for i386-pc platform.
Installation finished. No error reported.
[root@localhost /]# exit
exit
[root@localhost ~]# umount /mnt/centos/proc
[root@localhost ~]# umount /mnt/centos/sys
[root@localhost ~]# umount /mnt/centos/dev
[root@localhost ~]# umount /mnt/centos
[root@localhost ~]# reboot
PolicyKit daemon disconnected from the bus.
We are no longer a registered authentication agent.
Connection to srv closed by remote host.
Connection to srv closed.

STEP 8) Create one more RAID1 device for the swap

Create a new RAID1 for the swap partition and configure the /dev/sdb with parted. Add the new RAID1 device in /dev/default/grub and generate the grub2 configuration file.

[root@srv0 ~]# ssh srv
root@srv's password: 
Last login: Wed Apr  4 11:38:19 2018 from 192.168.0.110

[root@localhost ~]# parted /dev/sda --script print
Model: ATA SanDisk SD6SB2M5 (scsi)
Disk /dev/sda: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  4194kB  3146kB               primary  bios_grub
 2      4194kB  16.0GB  16.0GB               primary  raid
 3      16.0GB  50.0GB  34.0GB               primary  raid
 4      50.0GB  512GB   462GB                primary  raid

[root@localhost ~]# parted /dev/sdb --script print
Model: ATA SanDisk SD6SB2M5 (scsi)
Disk /dev/sdb: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  4194kB  3146kB               primary  bios_grub
 2      4194kB  16.0GB  16.0GB  ext4         primary
 3      16.0GB  50.0GB  34.0GB               primary  raid
 4      50.0GB  512GB   462GB                primary

[root@localhost ~]# parted /dev/sdb --script set 2 raid on
[root@localhost ~]# parted /dev/sdb --script set 4 raid on
[root@localhost ~]# mdadm --create --verbose --metadata=1.2 /dev/md0 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2
mdadm: /dev/sdb2 appears to contain an ext2fs file system
       size=15621120K  mtime=Wed Apr  4 12:24:37 2018
mdadm: size set to 15612928K
Continue creating array? yes
mdadm: array /dev/md0 started.
[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sdb2[1] sda2[0]
      15612928 blocks super 1.2 [2/2] [UU]
      [====>................]  resync = 21.5% (3371072/15612928) finish=0.9min speed=210692K/sec
      
md1 : active raid1 sdb3[1] sda3[0]
      33186816 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sdb2[1] sda2[0]
      15612928 blocks super 1.2 [2/2] [UU]
      
md1 : active raid1 sdb3[1] sda3[0]
      33186816 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
[root@localhost ~]# mkswap /dev/md0
Setting up swapspace version 1, size = 15612924 KiB
no label, UUID=0916f8c5-079d-4780-af38-89411fa7ec24
[root@localhost ~]# cat /etc/fstab |grep swap
UUID=20c3afea-87ae-4716-8a65-323bd9e6eae6 swap                    swap    defaults        0 0
[root@localhost ~]# sed -i "s/20c3afea-87ae-4716-8a65-323bd9e6eae6/0916f8c5-079d-4780-af38-89411fa7ec24/g" /etc/fstab
[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sdb2[1] sda2[0]
      15612928 blocks super 1.2 [2/2] [UU]
      
md1 : active raid1 sdb3[1] sda3[0]
      33186816 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
[root@localhost ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Wed Apr  4 11:00:01 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=38407879-7399-492c-bad6-d8a3ef0297d4 /                       ext4    defaults        1 1
#UUID=9b98bd49-34bd-43a3-89b9-32c36df722b2 /boot                   ext2    defaults        1 2
#UUID=7f44f0b8-cbbe-4e70-a763-112675cf9a2c /tmp                    ext4    noexec,nosuid,nodev        1 2
UUID=0916f8c5-079d-4780-af38-89411fa7ec24 swap                    swap    defaults        0 0
[root@localhost ~]# mdadm -E /dev/sda2
/dev/sda2:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 2e122130:2eefd9ec:5ad5b846:6bd10d6b
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Wed Apr  4 13:11:03 2018
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 31225856 (14.89 GiB 15.99 GB)
     Array Size : 15612928 (14.89 GiB 15.99 GB)
    Data Offset : 16384 sectors
   Super Offset : 8 sectors
   Unused Space : before=16232 sectors, after=0 sectors
          State : clean
    Device UUID : 7ef8d502:96208fd4:bbed302a:37063c83

    Update Time : Wed Apr  4 13:12:42 2018
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : c808e2cc - correct
         Events : 17


   Device Role : Active device 0
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
[root@localhost ~]# nano /etc/default/grub 
[root@localhost ~]# cat /etc/default/grub 
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200"
GRUB_CMDLINE_LINUX="rd.md.uuid=e59b6269:7af24168:193c51d0:65b33fd9 rd.md.uuid=2e122130:2eefd9ec:5ad5b846:6bd10d6b crashkernel=auto console=ttyS0,115200"
GRUB_DISABLE_RECOVERY="true"

[root@localhost ~]# mdadm --detail --scan > /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf 
ARRAY /dev/md1 metadata=1.2 name=localhost.localdomain:1 UUID=e59b6269:7af24168:193c51d0:65b33fd9
ARRAY /dev/md0 metadata=1.2 name=localhost.localdomain:0 UUID=2e122130:2eefd9ec:5ad5b846:6bd10d6b
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-693.21.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.21.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-3003b47aedb040f6baaf6fce8c6b8386
Found initrd image: /boot/initramfs-0-rescue-3003b47aedb040f6baaf6fce8c6b8386.img
done
[root@localhost ~]# reboot
Connection to srv closed by remote host.
Connection to srv closed.
[root@srv0 ~]# 

So we changed our root filesystem device configuration from a single partition to a RAID1 device for redundancy and better performance!

[root@srv0 ~]# ssh srv
root@srv's password: 
Last login: Wed Apr  4 13:35:55 2018 from 192.168.0.110
[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/md1         32G  1.6G   28G   6% /
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G     0   16G   0% /dev/shm
tmpfs            16G  8.5M   16G   1% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
tmpfs           3.2G     0  3.2G   0% /run/user/0
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:            31G        273M         30G        8.5M        199M         30G
Swap:           14G          0B         14G
[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sda2[0] sdb2[1]
      15612928 blocks super 1.2 [2/2] [UU]
      
md1 : active raid1 sda3[0] sdb3[1]
      33186816 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
[root@localhost ~]#

STEP 9) Create the storage device

The storage device is a RAID5 setup with 4 hard disks available in the current machine (but it is the same with two devices except the RAID is RAID1). The idea is to separate the storage from the root filesystem that’s why we have separate two RAID devices.

[root@localhost ~]# parted /dev/sdc --script mklabel gpt
[root@localhost ~]# parted /dev/sdc --script mkpart primary 0% 4M
[root@localhost ~]# parted /dev/sdc --script mkpart primary 4M 16G
[root@localhost ~]# parted /dev/sdc --script mkpart primary 16G 50G
[root@localhost ~]# parted /dev/sdc --script mkpart primary 50G 100%
[root@localhost ~]# parted /dev/sdc --script set 1 bios_grub on
[root@localhost ~]# parted /dev/sdc --script set 2 raid on
[root@localhost ~]# parted /dev/sdc --script set 3 raid on
[root@localhost ~]# parted /dev/sdc --script set 4 raid on
[root@localhost ~]# parted /dev/sdd --script mklabel gpt
[root@localhost ~]# parted /dev/sdd --script mkpart primary 0% 4M
[root@localhost ~]# parted /dev/sdd --script mkpart primary 4M 16G
[root@localhost ~]# parted /dev/sdd --script mkpart primary 16G 50G
[root@localhost ~]# parted /dev/sdd --script mkpart primary 50G 100%
[root@localhost ~]# parted /dev/sdd --script set 1 bios_grub on
[root@localhost ~]# parted /dev/sdd --script set 2 raid on
[root@localhost ~]# parted /dev/sdd --script set 3 raid on
[root@localhost ~]# parted /dev/sdd --script set 4 raid on
[root@localhost ~]# mdadm --create --verbose /dev/md2 --level=5 --raid-devices=4 --chunk=1024 /dev/sda4 /dev/sdb4 /dev/sdc4 /dev/sdd4
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: size set to 451147776K
mdadm: automatically enabling write-intent bitmap on large array
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.
[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] [raid6] [raid5] [raid4] 
md2 : active raid5 sdd4[4] sdc4[2] sdb4[1] sda4[0]
      1353443328 blocks super 1.2 level 5, 1024k chunk, algorithm 2 [4/3] [UUU_]
      [>....................]  recovery =  0.9% (4316984/451147776) finish=36.2min speed=205570K/sec
      bitmap: 0/4 pages [0KB], 65536KB chunk

md0 : active raid1 sda2[0] sdb2[1]
      15612928 blocks super 1.2 [2/2] [UU]
      
md1 : active raid1 sda3[0] sdb3[1]
      33186816 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
[root@localhost ~]# mkfs.ext4 /dev/md2
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=256 blocks, Stripe width=768 blocks
84590592 inodes, 338360832 blocks
16918041 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2487222272
10326 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000, 214990848

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

[root@localhost ~]# blkid | grep md2
/dev/md2: UUID="0ba39ec9-a1fc-4593-a704-6171cb2a3403" TYPE="ext4" 
[root@localhost ~]# nano /etc/fstab 
[root@localhost ~]# mkdir -p /mnt/storage
[root@localhost ~]# mount /mnt/storage
[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/md1         32G  1.6G   28G   6% /
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G     0   16G   0% /dev/shm
tmpfs            16G  8.6M   16G   1% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
tmpfs           3.2G     0  3.2G   0% /run/user/0
/dev/md2        1.3T   77M  1.2T   1% /mnt/storage

QEMU full virtualization – CPU emulations (enable/disable CPU flags/instruction sets)

After the two QEMU full virtualization howtos

You can use qemu have a nearly native full virtualization. Here are some important tips for the guest CPU to consider when using qemu directly (without any virtualization manager like virt-manager, libvirt and so on).

TIP 1)Choose your host CPU emulation

You can see what options are available for host emulation with:

srv@local ~$ qemu-system-x86_64 -cpu help

x86           qemu64  QEMU Virtual CPU version 2.0.0                  
x86           phenom  AMD Phenom(tm) 9550 Quad-Core Processor         
x86         core2duo  Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz 
x86            kvm64  Common KVM processor                            
x86           qemu32  QEMU Virtual CPU version 2.0.0                  
x86            kvm32  Common 32-bit KVM processor                     
x86          coreduo  Genuine Intel(R) CPU           T2600  @ 2.16GHz 
x86              486                                                  
x86          pentium                                                  
x86         pentium2                                                  
x86         pentium3                                                  
x86           athlon  QEMU Virtual CPU version 2.0.0                  
x86             n270  Intel(R) Atom(TM) CPU N270   @ 1.60GHz          
x86           Conroe  Intel Celeron_4x0 (Conroe/Merom Class Core 2)   
x86           Penryn  Intel Core 2 Duo P9xxx (Penryn Class Core 2)    
x86          Nehalem  Intel Core i7 9xx (Nehalem Class Core i7)       
x86         Westmere  Westmere E56xx/L56xx/X56xx (Nehalem-C)          
x86      SandyBridge  Intel Xeon E312xx (Sandy Bridge)                
x86          Haswell  Intel Core Processor (Haswell)                  
x86       Opteron_G1  AMD Opteron 240 (Gen 1 Class Opteron)           
x86       Opteron_G2  AMD Opteron 22xx (Gen 2 Class Opteron)          
x86       Opteron_G3  AMD Opteron 23xx (Gen 3 Class Opteron)          
x86       Opteron_G4  AMD Opteron 62xx class CPU                      
x86       Opteron_G5  AMD Opteron 63xx class CPU                      
x86             host  KVM processor with all supported host features (only available in KVM mode)

Recognized CPUID flags:
  pbe ia64 tm ht ss sse2 sse fxsr mmx acpi ds clflush pn pse36 pat cmov mca pge mtrr sep apic cx8 mce pae msr tsc pse de vme fpu
  hypervisor rdrand f16c avx osxsave xsave aes tsc-deadline popcnt movbe x2apic sse4.2|sse4_2 sse4.1|sse4_1 dca pcid pdcm xtpr cx16 fma cid ssse3 tm2 est smx vmx ds_cpl monitor dtes64 pclmulqdq|pclmuldq pni|sse3
  smap adx rdseed rtm invpcid erms bmi2 smep avx2 hle bmi1 fsgsbase
  3dnow 3dnowext lm|i64 rdtscp pdpe1gb fxsr_opt|ffxsr mmxext nx|xd syscall
  perfctr_nb perfctr_core topoext tbm nodeid_msr tce fma4 lwp wdt skinit xop ibs osvw 3dnowprefetch misalignsse sse4a abm cr8legacy extapic svm cmp_legacy lahf_lm
  pmm-en pmm phe-en phe ace2-en ace2 xcrypt-en xcrypt xstore-en xstore
  kvm_pv_unhalt kvm_pv_eoi kvm_steal_time kvm_asyncpf kvmclock kvm_mmu kvm_nopiodelay kvmclock
  pfthreshold pause_filter decodeassists flushbyasid vmcb_clean tsc_scale nrip_save svm_lock lbrv npt

The host server will expose different instruction set to the guest server (the emulated CPU), so when you choose your host to emulate for example “qemu64” with:

qemu-system-x86_64 -enable-kvm  \
-cpu qemu64,+ssse3,+sse4.1,+sse4.2,+x2apic -smp 2,maxcpus=8 \
-daemonize -vnc 192.168.0.10:1 \
-drive file=/mnt/storage/qemu/roofs/srv_virt.qcow2,index=0,cache=none,aio=threads,if=virtio \
-cdrom /mnt/storage/images/install-amd64-minimal-20140327.iso -boot d \
-net nic,model=virtio,macaddr=$(< /sys/class/net/macvtap0/address) \
-net tap,fd=3 3<>/dev/tap$(< /sys/class/net/macvtap0/ifindex) \
-balloon virtio -m 8192 \
-monitor telnet:127.0.0.1:5801,server,nowait -writeconfig /opt/qemu/config/srv_virt.qcow2.conf

The guest server (the virtual machine) will have the following CPU and instruction set:

vendor_id       : GenuineIntel
cpu family      : 6
model           : 6
model name      : QEMU Virtual CPU version 2.0.0
stepping        : 3
microcode       : 0x1
cpu MHz         : 2133.408
cache size      : 4096 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 4
wp              : yes
flags           : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm rep_good nopl pni ssse3 cx16 sse4_1 x2apic popcnt hypervisor lahf_lm
bogomips        : 4266.81
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 6
model name      : QEMU Virtual CPU version 2.0.0
stepping        : 3
microcode       : 0x1
cpu MHz         : 2133.408
cache size      : 4096 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 4
wp              : yes
flags           : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm rep_good nopl pni ssse3 cx16 sse4_1 x2apic popcnt hypervisor lahf_lm
bogomips        : 4266.81
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

A base set of instructions (flags) with the explicitly included by our command with

+ssse3,+sse4.1,+sse4.2,+x2apic

. The format:

-cpu qemu64,+ssse3,+sse4.1,+sse4.2,+x2apic

IF you choose the last option:

-cpu host

the host server will try to emulate and expose to the virtual machine its processor and all flags:

qemu-system-x86_64 -enable-kvm  \
-cpu host -smp 2,maxcpus=8 \
-daemonize -vnc 192.168.0.10:1 \
-drive file=/mnt/storage/qemu/roofs/srv_virt.qcow2,index=0,cache=none,aio=threads,if=virtio \
-cdrom /mnt/storage/images/install-amd64-minimal-20140327.iso -boot d \
-net nic,model=virtio,macaddr=$(< /sys/class/net/macvtap0/address) \
-net tap,fd=3 3<>/dev/tap$(< /sys/class/net/macvtap0/ifindex) \
-balloon virtio -m 8192 \
-monitor telnet:127.0.0.1:5801,server,nowait -writeconfig /opt/qemu/config/srv_virt.qcow2.conf

The virtual machine:

[root@vm0 ~]# cat /proc/cpuinfo 
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 44
model name      : Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz
stepping        : 2
microcode       : 0x1
cpu MHz         : 2133.408
cache size      : 8192 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 11
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes hypervisor lahf_lm tsc_adjust
bogomips        : 4266.81
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

The host server:

[root@srv0 ~]# cat /proc/cpuinfo 
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 44
model name      : Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz
stepping        : 2
microcode       : 0x14
cpu MHz         : 1200.000
cache size      : 8192 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 11
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 popcnt aes lahf_lm tpr_shadow vnmi flexpriority ept vpid dtherm arat
bogomips        : 4266.41
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

TIP 2) Disable certain CPU flags (instruction sets)

As you can see with the above CPU options you can hide your exact type of processor and you could disable specific CPU flags (instruction sets) to the user’s virtual machine. The purpose is up to the user and one reason for example could be not offer “avx” (or “avx2”) to discourage crypto mining with the virtual machine. Or limit the SSE2/3/4/4.2/SSSE3 and other “multimedia” instruction sets to discourage video encoding and so on. Probably you would like to be used It’s up to you what to offer to the virtual machine user.
Here is the command to emulate the host CPU with all supported flags but disable “sse4.1” and “sse4.2”:
The syntax:

-cpu host,-sse4.1,-sse4.2

And the qemu command is:

qemu-system-x86_64 -enable-kvm \
-cpu host,-sse4.1,-sse4.2 \
-smp 2,maxcpus=8 \
-daemonize -vnc 192.168.0.10:1 \
-drive file=/mnt/storage/qemu/roofs/srv_virt.qcow2,index=0,cache=none,aio=threads,if=virtio \
-cdrom /mnt/storage/images/install-amd64-minimal-20140327.iso -boot d \
-net nic,model=virtio,macaddr=$(< /sys/class/net/macvtap0/address) \
-net tap,fd=3 3<>/dev/tap$(< /sys/class/net/macvtap0/ifindex) \
-balloon virtio -m 8192 \
-monitor telnet:127.0.0.1:5801,server,nowait -writeconfig /opt/qemu/config/srv_virt.qcow2.conf

So the virtual machine lacks the disabled flags:

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl pni pclmulqdq ssse3 cx16 pcid x2apic popcnt tsc_deadline_timer aes hypervisor lahf_lm tsc_adjust

TIP 3) Number of virtual processors in the virtual machine

The syntax

-smp 2,maxcpus=8

of the qemu command:

qemu-system-x86_64 -enable-kvm  -cpu host \
-smp 2,maxcpus=8 \
-daemonize -vnc 192.168.0.10:1 \
-drive file=/mnt/storage/qemu/roofs/srv_virt.qcow2,index=0,cache=none,aio=threads,if=virtio \
-cdrom /mnt/storage/images/install-amd64-minimal-20140327.iso -boot d \
-net nic,model=virtio,macaddr=$(< /sys/class/net/macvtap0/address) \
-net tap,fd=3 3<>/dev/tap$(< /sys/class/net/macvtap0/ifindex) \
-balloon virtio -m 8192 \
-monitor telnet:127.0.0.1:5801,server,nowait -writeconfig /opt/qemu/config/srv_virt.qcow2.conf

will start up the virtual machine with 2 processors and you can hot add a cpu up to 8 total in any time you want with the management console listening on 127.0.0.1:5801.

Howto do QEMU full virtualization with bridged networking

This howto rather continues the previous one “Howto do QEMU full virtualization with MacVTap networking” with the exception it will be showed how to use a classic setup of the networking – the use of bridge device. Because this setup requires specific configuration for every linux distro if we do not just add the bridge manually it is separated in this howto. For the clear and full howto we would repeat the two first steps just to enable this howto to be independent from the original one mentioned above.
So use full virtualization under linux you can use QEMU and no other library or manager like virt-manager. QEMU is simple enough and with couple of parameters to it you can start KVM virtual machines with near native performance. To use KVM you must enable it in the BIOS of your server (or desktop machine).

Here are the main steps:

STEP 1) Enable KVM in the BIOS

  • For Intel machine you must find option Intel Virtualization Technology (or Intel VT-x) probably in BIOS menu of Chipset, Advanced CPU Configuration or other.
  • For AMD machine the virtualization cannot be disabled so it is enabled by default, but you can check for additional virtualization features to enable like Virtualization Extensions, Vanderpool and other.
  • Enable also additional features – Intel VT-d or AMD IOMMU, if they are available.

Reboot your machine and check if the KVM is supported:

srv@local ~$ cat /proc/cpuinfo |grep -E "vmx|svm"
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap xsaveopt dtherm ida arat pln pts
...

STEP 2) Install QEMU

Under CentOS 7 you can just install couple of packets – that’s all you need:

yum install -y qemu qemu-common qemu-img qemu-kvm-common qemu-system-x86 qemu-user bridge-utils

Or under Ubuntu

apt-get install qemu-kvm bridge-utils

STEP 3) Prepare the network 1 – the bridge device

Under CentOS 7 add the following configuration file

/etc/sysconfig/network-scripts/ifcfg-br0

with the content of

DEVICE=br0
TYPE=Bridge
BOOTPROTO=none
ONBOOT=yes
IPADDR0=192.168.0.1
PREFIX0=24
#GATEWAY0=192.168.0.1
NETMASK=255.255.255.0
IPV6_FAILURE_FATAL=no
NM_CONTROLLED=no
ZONE=public

If you want to use real IP set to your virtual machine, you should set a real IP here and uncomment the GATEWAY0 with the real gateway IP. If real IP is used then you should include the main Internet network interface to the bridge with adding at the end of the configuration file /etc/sysconfig/network-scripts/ifcfg-eth0 (if eth0 is your network interface):

...
BRIDGE=br0

And restart the network

srv@local ~$ systemctl restart network

Under Ubuntu add to the file

/etc/network/interfaces

the following:

# Bridge
auto br0
iface br0 inet static
  address 192.168.0.10
  netmask 255.255.255.0
#  gateway 192.168.0.1
  bridge_ports none
  bridge_stp off
  bridge_fd 0
  bridge_maxwait 0

If you want to use real IP set to your virtual machine, you should set a real IP here and uncomment the GATEWAY0 with the real gateway IP and replace the “none” in the option “bridge_ports” with the name of your main Internet network interface. For example:

  ...
  bridge_ports eth0
  ...

And restart the network

srv@local ~$ /etc/init.d/networking restart

Or we can add the bridge device manually:

srv@local ~$ brctl addbr br0
srv@local ~$ ip link set dev br0 up
srv@local ~$ ip addr add 192.168.0.1/24 dev br0

If we use real IP we have to add the main Internet network interface to the bridge, so when you set up the network in our virtual machine with a real IP it will work with no more additional configurations, but if we use a local IPs like our setup here and we want to have Internet in our virtual machine we must enable masquerade and linux routing. You can do it with:

srv@local ~$ echo 1 > /proc/sys/net/ipv4/ip_forward
#NAT with firewalld
srv@local ~$ firewall-cmd --add-masquerade --permanent
#NAT with iptables
srv@local ~$ iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE

Use either firewalld or iptables setup, depends on your system configuration, just check if firewalld is running with:

srv@local ~$ firewall-cmd --list-all

If you receive an error, saying command not found or firewalld is not running, you should use the “NAT with iptables”
So the network is ready!

STEP 4) Prepare the network 2 – the tun/tap for the virtual machine

After we have added a bridge device tun/tap device, which will be used for the QEMU virtual machine must be added:

srv@local ~$ ip tuntap add tap0 mode tap
srv@local ~$ brctl addif br0 tap0

STEP 5) Create a QEMU hard drive

Create a 100G file

srv@local ~$ cd /mnt/storage1/disks/
srv@local ~$ qemu-img create -f qcow2 vm_harddisk.qcow2 100G
Formatting 'vm_harddisk.qcow2', fmt=qcow2 size=107374182400 encryption=off cluster_size=65536 lazy_refcounts=off 

or you can enable encryption (but on every start of your virtual machine you must set the key through the qemu console to start the virtual machine):

srv@local ~$ qemu-img create -f qcow2 vm_harddisk_e.bin -o encryption 100G
Formatting 'vm_harddisk_e.bin', fmt=qcow2 size=107374182400 encryption=on cluster_size=65536 lazy_refcounts=off

STEP 6) Boot up the QEMU KVM virtual server

srv@local ~$ qemu-system-x86_64 -enable-kvm -cpu host -smp 4 -runas qemu -daemonize -vnc 127.0.0.1:1 \
-drive file=/mnt/storage1/disks/vm_harddisk.qcow2,index=0,cache=none,aio=threads,if=virtio \
-boot d -net nic,model=virtio,macaddr=00:00:00:00:00:01 -net tap,ifname=tap0 \
-balloon virtio -m 2048 -monitor telnet:127.0.0.1:5801,server,nowait

The command above will :

  • “-enable-kvm” – enable the KVM – full virtualization with near native performance
  • “-cpu host” – will expose all supported host CPU features (only supported in KVM mode)
  • “-smp 4” – sets 4 processors to the virtual machine
  • “-daemonize” – start the command in daemon mode
  • “-runas qemu” – run under user, you can run thwo whole virtual machine from a user created especially for it, no need to run it with root, even it is recommended to run it under unprivileged user
  • “-vnc 192.168.1.10:1” – start a VNC server on this IP:PORT = 192.168.1.10:5901, the IP must present on the server or you can use 0.0.0.0:1 for 0.0.0.0:5901, but in every situation limit the access by a firewall
  • “-drive file=/mnt/storage1/disks/vm_harddisk.qcow2,index=0,cache=none,aio=threads,if=virtio” – set the main hard drive of the system
  • “-boot d” – boot from the first hard drive
  • “-net nic,model=virtio,macaddr=00:00:00:00:00:01 -net tap,ifname=tap0” – set the network interface using the tap device created by STEP 3) and STEP 4)
  • “-balloon virtio” – use balloon driver to be able to hot add or hot remove RAM
  • “-m 2048” – set virtual RAM size to megs
  • “-monitor telnet:127.0.0.1:5801,server,nowait” – set the management console for the this virtual server, you can connect with:
    srv@local ~$ telnet 127.0.0.1 5801
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    QEMU 2.0.0 monitor - type 'help' for more information
    (qemu) 
    <Press "CTRL+]">
    telnet> Connection closed.
    

    When quitting the management console you must NOT exit the console with quite/exit or CTRL+d, becuause it will terminate the virtual server, you must disconnect from the console with “CTRL+]” and then quit the telnet shell. With the console you can hot add/remove CPU, RAM, network cards, pci devices, harddrives, start/stop/shutdown/reset the virtual machine and a lot more.

Boot the virtual machine from the hard drive given by “-drive” with network “-net” (couple of options), the RAM uses baloon memory and could be adjusted on-the-fly and sets the vncserver to listen for connection on port IP:port = 192.168.1.1:5901 (probably you’ll want to change this with a the real IP of your server, but be careful to set up a firewall rule for 5901 – the vnc port) and a management console listening on IP:port 127.0.0.1:5801.

* Boot the virtual server from a virtual CD/DVD

Probably the first time booting you might need to boot from an installation disk, this could be done by the following command:

srv@local ~$ qemu-system-x86_64 -enable-kvm -cpu host -smp 4 -runas qemu -daemonize -vnc 127.0.0.1:1 -cdrom /mnt/storage1/disks/isos/CentOS-7-x86_64-NetInstall-1708.iso -boot c -drive file=/mnt/storage1/disks/vm_harddisk.qcow2,index=0,cache=none,aio=threads,if=virtio -net nic,model=virtio,macaddr=00:00:00:00:00:01 -net tap,ifname=tap0 -balloon virtio -m 2048 -monitor telnet:127.0.0.1:5805,server,nowait

The changes:

  1. “-boot c” – First boot device is now CD/DVD. “c” is for CD, “d” is for disk
  2. “-cdrom /mnt/storage1/disks/isos/CentOS-7-x86_64-NetInstall-1708.iso” – added the installation disk to the virtual machine

Howto do QEMU full virtualization with MacVTap networking

To use full virtualization under linux you can use QEMU and no other library or manager like virt-manager. QEMU is simple enough and with couple of parameters to it you can start KVM virtual machines with near native performance. To use KVM you must enable it in the BIOS of your server (or desktop machine).

Here a several simple step to start a KVM virtual server:

STEP 1) Enable KVM in the BIOS

  • For Intel machine you must find option Intel Virtualization Technology (or Intel VT-x) probably in BIOS menu of Chipset, Advanced CPU Configuration or other.
  • For AMD machine the virtualization cannot be disabled so it is enabled by default, but you can check for additional virtualization features to enable like Virtualization Extensions, Vanderpool and other.
  • Enable also additional features – Intel VT-d or AMD IOMMU, if they are available.

Reboot your machine and check if the KVM is supported:

srv@local ~$ cat /proc/cpuinfo |grep -E "vmx|svm"
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap xsaveopt dtherm ida arat pln pts
...

STEP 2) Install QEMU

Under CentOS 7 you can just install couple of packets – that’s all you need:

yum install -y qemu qemu-common qemu-img qemu-kvm-common qemu-system-x86 qemu-user bridge-utils

Or under Ubuntu

apt-get install qemu-kvm bridge-utils

STEP 3) Prepare the network

srv@local ~$ ip link add link enp8s0f1 name macvtap0 type macvtap mode bridge
srv@local ~$ ip link set macvtap0 up

Here we create a macvtap0 device in bridge mode, these commands will create a tap device bridged to the network interface “enp8s0f1” (in our case, you must replace this device name with the device name you want to bridge your virtual machine network, probably the main interface of your server/desktop machine?). Only these two commands are needed, no other devices or network reload is needed.
The device will show in “ip addr”

7: macvtap0@enp8s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether 2e:51:7e:bb:44:ee brd ff:ff:ff:ff:ff:ff
    inet6 fe80::2c51:7eff:febb:44ee/64 scope link 
       valid_lft forever preferred_lft forever

This setup could expose the MAC address of the macvtap device to the router port connected

STEP 4) Create a QEMU hard drive

Create a 100G file

srv@local ~$ cd /mnt/storage1/disks/
srv@local ~$ qemu-img create -f qcow2 vm_harddisk.qcow2 100G
Formatting 'vm_harddisk.qcow2', fmt=qcow2 size=107374182400 encryption=off cluster_size=65536 lazy_refcounts=off 

or you can enable encryption (but on every start of your virtual machine you must set the key through the qemu console to start the virtual machine):

srv@local ~$ qemu-img create -f qcow2 vm_harddisk_e.bin -o encryption 100G
Formatting 'vm_harddisk_e.bin', fmt=qcow2 size=107374182400 encryption=on cluster_size=65536 lazy_refcounts=off

STEP 5) Boot up the QEMU KVM virtual server

srv@local ~$ qemu-system-x86_64 -enable-kvm -cpu host -smp 4 -runas qemu -daemonize -vnc 127.0.0.1:1 \
-drive file=/mnt/storage1/disks/vm_harddisk.qcow2,index=0,cache=none,aio=threads,if=virtio \
-boot d -net nic,model=virtio,macaddr=$(cat /sys/class/net/macvtap0/address) \
-net tap,fd=3 3<>/dev/tap$(cat /sys/class/net/macvtap0/ifindex) \
-balloon virtio -m 2048 -monitor telnet:127.0.0.1:5801,server,nowait

The command above will :

  • “-enable-kvm” – enable the KVM – full virtualization with near native performance
  • “-cpu host” – will expose all supported host CPU features (only supported in KVM mode)
  • “-smp 4” – sets 4 processors to the virtual machine
  • “-daemonize” – start the command in daemon mode
  • “-runas qemu” – run under user, you can run thwo whole virtual machine from a user created especially for it, no need to run it with root, even it is recommended to run it under unprivileged user
  • “-vnc 192.168.1.10:1” – start a VNC server on this IP:PORT = 192.168.1.10:5901, the IP must present on the server or you can use 0.0.0.0:1 for 0.0.0.0:5901, but in every situation limit the access by a firewall
  • “-drive file=/mnt/storage1/disks/vm_harddisk.qcow2,index=0,cache=none,aio=threads,if=virtio” – set the main hard drive of the system
  • “-boot d” – boot from the first hard drive
  • “-net nic,model=virtio,macaddr=$(cat /sys/class/net/macvtap0/address) -net tap,fd=3 3<>/dev/tap$(cat /sys/class/net/macvtap0/ifindex)” – set the network interface using the tap device created by macvtap0 device (STEP 3)
  • “-balloon virtio” – use balloon driver to be able to hot add or hot remove RAM
  • “-m 2048” – set virtual RAM size to megs
  • “-monitor telnet:127.0.0.1:5801,server,nowait” – set the management console for the this virtual server, you can connect with:
    srv@local ~$ telnet 127.0.0.1 5801
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    QEMU 2.0.0 monitor - type 'help' for more information
    (qemu) 
    <Press "CTRL+]">
    telnet> Connection closed.
    

    When quitting the management console you must NOT exit the console with quite/exit or CTRL+d, becuause it will terminate the virtual server, you must disconnect from the console with “CTRL+]” and then quit the telnet shell. With the console you can hot add/remove CPU, RAM, network cards, pci devices, harddrives, start/stop/shutdown/reset the virtual machine and a lot more.

Boot the virtual machine from the hard drive given by “-drive” with network “-net” (couple of options), the RAM uses baloon memory and could be adjusted on-the-fly and sets the vncserver to listen for connection on port IP:port = 192.168.1.1:5901 (probably you’ll want to change this with a the real IP of your server, but be careful to set up a firewall rule for 5901 – the vnc port) and a management console listening on IP:port 127.0.0.1:5801.

* Boot the virtual server from a virtual CD/DVD

Probably the first time booting you might need to boot from an installation disk, this could be done by the following command:

srv@local ~$ qemu-system-x86_64 -enable-kvm -cpu host -smp 4 -runas qemu -daemonize -vnc 127.0.0.1:1 -cdrom /mnt/storage1/disks/isos/CentOS-7-x86_64-NetInstall-1708.iso -boot c -drive file=/mnt/storage1/disks/vm_harddisk.qcow2,index=0,cache=none,aio=threads,if=virtio -net nic,model=virtio,macaddr=$(cat /sys/class/net/macvtap0/address) -net tap,fd=3 3<>/dev/tap$(cat /sys/class/net/macvtap0/ifindex) -balloon virtio -m 2048 -monitor telnet:127.0.0.1:5801,server,nowait

The changes:

  1. “-boot c” – First boot device is now CD/DVD. “c” is for CD, “d” is for disk
  2. “-cdrom /mnt/storage1/disks/isos/CentOS-7-x86_64-NetInstall-1708.iso” – added the installation disk to the virtual machine

Generate a new Groestlcoin address (wallet) and list accounts and addresses

The generation of a new Groestlcoin address is super simple, just use

groestlcoin-cli

and personally create your new address. DO NOT TRUST any online or website or any other Internet source to generate your Groestlcoin wallet address for you. DO IT YOURSELF with the official software from the official site!
And for those of you, which do not have “groestlcoin-cli” command or even do not know what is this, check out our howtos here:

  1. Install Ubuntu 16 LTS (comming soon)
  2. Running a Groestlcoin node (wallet cli) from source under Ubuntu 16 LTS

Go to your directory where is the groestlcoin-cli binary and execute the following command (the path and directories in the following examples are based on the above howto):

srv@local:~$ cd ~/groestlcoin-core/bin/
srv@local:~/groestlcoin-core/bin$ ./groestlcoin-cli getnewaddress mygroestlcoin
FeNFjh81VDJvZrdvi8EotKuJ8es8cCz7bZ
srv@local:~/groestlcoin-core/bin$ ./groestlcoin-cli encryptwallet "my secret pass"
wallet encrypted; Groestlcoin server stopping, restart to run with encrypted wallet. The keypool has been flushed and a new HD seed was generated (if you are using HD). You need to make a new backup.

The groestlcoind daemon was stopped and you need to start it again if you want to make transactions or to get your balance.
With Groestlcoin Core Wallet you can create an account, which could be a group of groestlcoin addresses (this is a groestlcoin address: “FeNFjh81VDJvZrdvi8EotKuJ8es8cCz7bZ”) or just use the default with no name of the account.
It is important to encrypt your wallet with a password, because if the wallet is unprotected with a password anyone could steal it! Then enter a password for your wallet protection is the second command above!

This sequence of numbers and alphabets

FeNFjh81VDJvZrdvi8EotKuJ8es8cCz7bZ

is your public Groestlcoin address, which could be used to receive Groestlcoins – the coins of the Groestlcoin network.

After generating the address two things must be done:

  1. Backup your Groestlcoin wallet address file (wallet.dat), which is placed in your home directory under “.groestlcoin”:
    srv@local:~/groestlcoin-core/bin$ ls -altr ~/.groestlcoin/
    srv@local:~$ ls -altr ~/.groestlcoin/
    total 476
    -rw------- 1 ubuntu ubuntu      0 Mar 27 21:41 .lock
    -rw------- 1 ubuntu ubuntu      0 Mar 27 21:41 db.log
    -rw------- 1 ubuntu ubuntu     37 Mar 27 21:41 banlist.dat
    drwx------ 3 ubuntu ubuntu   4096 Mar 27 22:18 blocks
    drwxr-xr-x 7 ubuntu ubuntu   4096 Mar 28 01:25 ..
    -rw------- 1 ubuntu ubuntu 145650 Mar 28 14:16 peers.dat
    -rw------- 1 ubuntu ubuntu     17 Mar 28 14:16 mempool.dat
    -rw------- 1 ubuntu ubuntu  16625 Mar 28 14:16 fee_estimates.dat
    -rw------- 1 ubuntu ubuntu  73728 Mar 28 14:16 wallet.dat
    -rw------- 1 ubuntu ubuntu      5 Mar 28 14:17 groestlcoin.pid
    -rw------- 1 ubuntu ubuntu     75 Mar 28 14:17 .cookie
    drwxrwxr-x 5 ubuntu ubuntu   4096 Mar 28 14:17 .
    drwx------ 2 ubuntu ubuntu   4096 Mar 28 14:18 chainstate
    drwx------ 2 ubuntu ubuntu   4096 Mar 28 14:18 database
    -rw------- 1 ubuntu ubuntu 206800 Mar 28 14:27 debug.log
    srv@local:~$ 
    

    The best practice is to backup all the files under “~/.groestlcoin/”, too!

  2. Backup your password for the private key!

Accounts

List all accounts in the wallet

srv@local:~/groestlcoin-core/bin$ ./groestlcoin-cli listaccounts
{
  "": 0.00000000,
  "mygroestlcoin": 0.00000000
}

List all Groestlcoin addresses in a given account:

srv@local:~/groestlcoin-core/bin$ ./groestlcoin-cli getaddressesbyaccount ""
[
  "FYM6aAQdmg6tziT4trPb777xNfPaaUnfqp", 
  "FamX8GYBuLFkLSAbyZ7M55vFW6AECoYKEV", 
  "Fp9PwAgfTqaF3aJ4zGGLjGKP7iEMdsrR3Z"
]
srv@local:~/groestlcoin-core/bin$ ./groestlcoin-cli getaddressesbyaccount "mygroestlcoin"
[
  "FeNFjh81VDJvZrdvi8EotKuJ8es8cCz7bZ", 
  "FrrnHESU8Utqk1ZjhQZjpWwc5cjKgHwCaS"
]

* It is absolutely necessary your crypto wallet addresses to have a password for security reasons and DO NOT FORGET IT you cannot recover the password therefore your access to the wallet! If you lose your password you lose ALL your funds in the address! It’s better to write it down somewhere on a safe physical place. You can print it on a sheet of paper and place it somewhere safe!

* All available commands with “groestlcoin-cli

groestlcoin-cli help
== Blockchain ==
getbestblockhash
getblock "hash" ( verbose )
getblockchaininfo
getblockcount
getblockhash index
getblockheader "hash" ( verbose )
getchaintips
getdifficulty
getmempoolancestors txid (verbose)
getmempooldescendants txid (verbose)
getmempoolentry txid
getmempoolinfo
getrawmempool ( verbose )
gettxout "txid" n ( includemempool )
gettxoutproof ["txid",...] ( blockhash )
gettxoutsetinfo
preciousblock "hash"
verifychain ( checklevel numblocks )
verifytxoutproof "proof"

== Control ==
getinfo
getmemoryinfo
help ( "command" )
stop

== Generating ==
generate numblocks ( maxtries )
generatetoaddress numblocks address (maxtries)

== Mining ==
getblocktemplate ( TemplateRequest )
getmininginfo
getnetworkhashps ( blocks height )
prioritisetransaction <txid> <priority delta> <fee delta>
submitblock "hexdata" ( "jsonparametersobject" )

== Network ==
addnode "node" "add|remove|onetry"
clearbanned
disconnectnode "node" 
getaddednodeinfo ( "node" )
getconnectioncount
getnettotals
getnetworkinfo
getpeerinfo
listbanned
ping
setban "ip(/netmask)" "add|remove" (bantime) (absolute)
setnetworkactive true|false

== Rawtransactions ==
createrawtransaction [{"txid":"id","vout":n},...] {"address":amount,"data":"hex",...} ( locktime )
decoderawtransaction "hexstring"
decodescript "hex"
fundrawtransaction "hexstring" ( options )
getrawtransaction "txid" ( verbose )
sendrawtransaction "hexstring" ( allowhighfees )
signrawtransaction "hexstring" ( [{"txid":"id","vout":n,"scriptPubKey":"hex","redeemScript":"hex"},...] ["privatekey1",...] sighashtype )

== Util ==
createmultisig nrequired ["key",...]
estimatefee nblocks
estimatepriority nblocks
estimatesmartfee nblocks
estimatesmartpriority nblocks
signmessagewithprivkey "privkey" "message"
validateaddress "groestlcoinaddress"
verifymessage "groestlcoinaddress" "signature" "message"

== Wallet ==
abandontransaction "txid"
addmultisigaddress nrequired ["key",...] ( "account" )
addwitnessaddress "address"
backupwallet "destination"
dumpprivkey "groestlcoinaddress"
dumpwallet "filename"
getaccount "groestlcoinaddress"
getaccountaddress "account"
getaddressesbyaccount "account"
getbalance ( "account" minconf includeWatchonly )
getnewaddress ( "account" )
getrawchangeaddress
getreceivedbyaccount "account" ( minconf )
getreceivedbyaddress "groestlcoinaddress" ( minconf )
gettransaction "txid" ( includeWatchonly )
getunconfirmedbalance
getwalletinfo
importaddress "address" ( "label" rescan p2sh )
importmulti '[<json import requests>]' '<json options>' 
importprivkey "groestlcoinprivkey" ( "label" rescan )
importprunedfunds
importpubkey "pubkey" ( "label" rescan )
importwallet "filename"
keypoolrefill ( newsize )
listaccounts ( minconf includeWatchonly)
listaddressgroupings
listlockunspent
listreceivedbyaccount ( minconf includeempty includeWatchonly)
listreceivedbyaddress ( minconf includeempty includeWatchonly)
listsinceblock ( "blockhash" target-confirmations includeWatchonly)
listtransactions ( "account" count from includeWatchonly)
listunspent ( minconf maxconf  ["address",...] )
lockunspent unlock ([{"txid":"txid","vout":n},...])
move "fromaccount" "toaccount" amount ( minconf "comment" )
removeprunedfunds "txid"
sendfrom "fromaccount" "togroestlcoinaddress" amount ( minconf "comment" "comment-to" )
sendmany "fromaccount" {"address":amount,...} ( minconf "comment" ["address",...] )
sendtoaddress "groestlcoinaddress" amount ( "comment" "comment-to" subtractfeefromamount )
setaccount "groestlcoinaddress" "account"
settxfee amount
signmessage "groestlcoinaddress" "message"
walletlock
walletpassphrase "passphrase" timeout
walletpassphrasechange "oldpassphrase" "newpassphrase"

Bacula – show configuration, status and information with bconsole tool

The following list of commands could be used to get a brief or detailed view of a Bacula backup server from the management utility

bconsole

. These commands are extremely useful for getting information of the backup process and policy and Bacula troubleshooting – could be used for fast debug of a error, problems or misconfiguration.

the following commands give information for

  • Jobs

    list jobtotals Lists stats for all jobs, it also shows all jobs’ names
    show jobs Lists all jobs with their full configurations – show all jobs and for each job show detail explanation of what represent. The detail output includes full configuration of a job including client, catalog, fileset,schedule,pool,message. This will show all relationships between the different components of bacula system, how and which clients,storages,pools,schedules,filesets relate to. You’ll a thoroughly view of how let’s say a server is made the backup.
    show job=[job_name] shows full configuration for a job, the name could be taken by the two above commands
    list jobs Lists all jobs’ status – ID, StartTime, Type (backup?), Level (Full, increment, differential?), Files and bytes processed and the status of the job (Terminated normally, Running,Fatal error and so on)
    list files jobid=[ID] which files were included in the backup? Lists all paths and files included in the backup, not a configuration set but real physical path and filenames.
    status dir if you want to find all scheduled jobs for the next day (or more if you add a parameter). This will show the status of the director process.
  • Storages

    status storage list storage devices and their status – you can see the physical path on the filesystem where the Devices will put backup files
  • Clients

    show client show all clients’ names and backup policy
    status client=[client_name] show client status and what is doing, check the network connection between the director and the client, last terminated jobs and their status.
  • Filesets

    show fileset show all filesets, a fileset is a set with files and directories to include or exclude from a backup.
  • Schedule

    show schedule shows all registered schedulers and details for each one (Run Level=Full,Differential,Incremental), months, days, minutes.
    show schedule=[scheduler_name] shows details for a schedule with name scheduler_name (Run Level=Full,Differential,Incremental), months, days, minutes. It’s like the schedule backup plan of a server
  • Director

    message shows the last message of the backup process. If empty all logs of the backup process could be found in “/var/log/bacula/bacula.log”
    reload the director will re-read its all configuration files. Should be used when adding configuration files.

And here is the example output of the above commands with a little bit of explanation:

  • Jobs

    1) Get the stats and the jobs’ names, the names could be used in many other commands!

    srvbkp@local # bconsole 
    Connecting to Director localhost:9101
    1000 OK: 1 srvbkp-dir Version: 7.0.5 (28 July 2014)
    Enter a period to cancel a command.
    *list jobtotals
    Automatically selected Catalog: allbackup
    Using Catalog "allbackup"
    +------+-----------+-------------------+--------------------------------+
    | Jobs | Files     | Bytes             | Job                            |
    +------+-----------+-------------------+--------------------------------+
    |   90 |        90 |   123,665,584,337 | BackupCatalog                  |
    |    5 |         5 |   281,593,737,603 | RestoreFiles                   |
    |   13 | 1,232,316 |   118,480,634,434 | srv1-media                     |
    |   32 |        12 |             3,674 | srv1-dns                       |
    |   32 |        10 |             3,064 | srv2-dns                       |
    |   32 |        10 |             3,064 | srv3-dns                       |
    |   32 |        10 |             3,086 | srv4-dns                       |
    |   32 |        10 |             3,084 | srv5-dns                       |
    |   26 | 3,837,536 |   587,812,183,466 | srv1-images                    |
    +------+-----------+-------------------+--------------------------------+
    +-------+------------+-------------------+
    | Jobs  | Files      | Bytes             |
    +-------+------------+-------------------+
    | 1,474 | 14,925,321 | 5,475,024,028,957 |
    +-------+------------+-------------------+
    *
    

    2) Get all configurations for all jobs, here are included only two for clarity. All needed information for taking a backup of a server. You can see the files, which will be included (or expluded), where the backup will be stored, when will happen in time and how many different types of backup will be done – full, incremental and differential. And this whole information is for all clients (servers).

    *show jobs
    Job: name=srv1-dns JobType=66 level= Priority=10 Enabled=1
         MaxJobs=1 Resched=0 Times=0 Interval=1,800 Spool=0 WritePartAfterJob=1
         Accurate=0
      --> Client: name=srv1-dns address=192.168.0.100 FDport=9102 MaxJobs=1
          JobRetention=1 month  FileRetention=1 month  AutoPrune=1
      --> Catalog: name=allbackup address=localhost DBport=0 db_name=bacula
          db_driver=*None* db_user=bacula MutliDBConn=0
      --> FileSet: name=bind
          O MZ6
          N
          I /var/lib/named
          N
      --> Schedule: name=bind
      --> Run Level=Full
          hour=20 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=0 
          wom=0 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
      --> Run Level=Differential
          hour=20 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=0 
          wom=1 2 3 4 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
      --> Run Level=Incremental
          hour=20 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=1 2 3 4 5 6 
          wom=0 1 2 3 4 5 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
      --> Storage: name=bind address=192.168.0.10 SDport=9103 MaxJobs=10
          DeviceName=bind MediaType=File StorageId=17
      --> Pool: name=Default PoolType=Backup
          use_cat=1 use_once=0 cat_files=1
          max_vols=100 auto_prune=1 VolRetention=1 year 
          VolUse=0 secs recycle=1 LabelFormat=*None*
          CleaningPrefix=*None* LabelType=0
          RecyleOldest=0 PurgeOldest=0 ActionOnPurge=0
          MaxVolJobs=0 MaxVolFiles=0 MaxVolBytes=53687091200
          MigTime=0 secs MigHiBytes=0 MigLoBytes=0
          JobRetention=0 secs FileRetention=0 secs
      --> Pool: name=bind-full PoolType=Backup
          use_cat=1 use_once=1 cat_files=1
          max_vols=0 auto_prune=1 VolRetention=2 months 
          VolUse=0 secs recycle=1 LabelFormat=bind-full
          CleaningPrefix=*None* LabelType=0
          RecyleOldest=0 PurgeOldest=0 ActionOnPurge=0
          MaxVolJobs=0 MaxVolFiles=0 MaxVolBytes=0
          MigTime=0 secs MigHiBytes=0 MigLoBytes=0
          JobRetention=0 secs FileRetention=0 secs
      --> Pool: name=bind-incr PoolType=Backup
          use_cat=1 use_once=0 cat_files=1
          max_vols=0 auto_prune=1 VolRetention=7 days 
          VolUse=23 hours  recycle=1 LabelFormat=bind-incr
          CleaningPrefix=*None* LabelType=0
          RecyleOldest=0 PurgeOldest=0 ActionOnPurge=0
          MaxVolJobs=0 MaxVolFiles=0 MaxVolBytes=0
          MigTime=0 secs MigHiBytes=0 MigLoBytes=0
          JobRetention=0 secs FileRetention=0 secs
      --> Pool: name=bind-diff PoolType=Backup
          use_cat=1 use_once=0 cat_files=1
          max_vols=0 auto_prune=1 VolRetention=1 month 1 day 
          VolUse=0 secs recycle=1 LabelFormat=bind-diff
          CleaningPrefix=*None* LabelType=0
          RecyleOldest=0 PurgeOldest=0 ActionOnPurge=0
          MaxVolJobs=0 MaxVolFiles=0 MaxVolBytes=0
          MigTime=0 secs MigHiBytes=0 MigLoBytes=0
          JobRetention=0 secs FileRetention=0 secs
      --> Messages: name=Standard
          mailcmd=/usr/sbin/bsmtp -h localhost -f "(Bacula) <%r>" -s "Bacula: %t %e of %c %l" %r
          opcmd=/usr/sbin/bsmtp -h localhost -f "(Bacula) <%r>" -s "Bacula: Intervention needed for %j" %r
    Job: name=srv2-dns JobType=66 level= Priority=10 Enabled=1
         MaxJobs=1 Resched=0 Times=0 Interval=1,800 Spool=0 WritePartAfterJob=1
         Accurate=0
      --> Client: name=srv2-dns address=192.168.0.101 FDport=9102 MaxJobs=1
          JobRetention=1 month  FileRetention=1 month  AutoPrune=1
      --> Catalog: name=allbackup address=localhost DBport=0 db_name=bacula
          db_driver=*None* db_user=bacula MutliDBConn=0
      --> FileSet: name=bind
          O MZ6
          N
          I /var/lib/named
          N
      --> Schedule: name=bind
      --> Run Level=Full
          hour=20 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=0 
          wom=0 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
      --> Run Level=Differential
          hour=20 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=0 
          wom=1 2 3 4 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
      --> Run Level=Incremental
          hour=20 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=1 2 3 4 5 6 
          wom=0 1 2 3 4 5 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
      --> Storage: name=bind address=192.168.0.10 SDport=9103 MaxJobs=10
          DeviceName=bind MediaType=File StorageId=17
      --> Pool: name=Default PoolType=Backup
          use_cat=1 use_once=0 cat_files=1
          max_vols=100 auto_prune=1 VolRetention=1 year 
          VolUse=0 secs recycle=1 LabelFormat=*None*
          CleaningPrefix=*None* LabelType=0
          RecyleOldest=0 PurgeOldest=0 ActionOnPurge=0
          MaxVolJobs=0 MaxVolFiles=0 MaxVolBytes=53687091200
          MigTime=0 secs MigHiBytes=0 MigLoBytes=0
          JobRetention=0 secs FileRetention=0 secs
      --> Pool: name=bind-full PoolType=Backup
          use_cat=1 use_once=1 cat_files=1
          max_vols=0 auto_prune=1 VolRetention=2 months 
          VolUse=0 secs recycle=1 LabelFormat=bind-full
          CleaningPrefix=*None* LabelType=0
          RecyleOldest=0 PurgeOldest=0 ActionOnPurge=0
          MaxVolJobs=0 MaxVolFiles=0 MaxVolBytes=0
          MigTime=0 secs MigHiBytes=0 MigLoBytes=0
          JobRetention=0 secs FileRetention=0 secs
      --> Pool: name=bind-incr PoolType=Backup
          use_cat=1 use_once=0 cat_files=1
          max_vols=0 auto_prune=1 VolRetention=7 days 
          VolUse=23 hours  recycle=1 LabelFormat=bind-incr
          CleaningPrefix=*None* LabelType=0
          RecyleOldest=0 PurgeOldest=0 ActionOnPurge=0
          MaxVolJobs=0 MaxVolFiles=0 MaxVolBytes=0
          MigTime=0 secs MigHiBytes=0 MigLoBytes=0
          JobRetention=0 secs FileRetention=0 secs
      --> Pool: name=bind-diff PoolType=Backup
          use_cat=1 use_once=0 cat_files=1
          max_vols=0 auto_prune=1 VolRetention=1 month 1 day 
          VolUse=0 secs recycle=1 LabelFormat=bind-diff
          CleaningPrefix=*None* LabelType=0
          RecyleOldest=0 PurgeOldest=0 ActionOnPurge=0
          MaxVolJobs=0 MaxVolFiles=0 MaxVolBytes=0
          MigTime=0 secs MigHiBytes=0 MigLoBytes=0
          JobRetention=0 secs FileRetention=0 secs
      --> Messages: name=Standard
          mailcmd=/usr/sbin/bsmtp -h localhost -f "(Bacula) <%r>" -s "Bacula: %t %e of %c %l" %r
          opcmd=/usr/sbin/bsmtp -h localhost -f "(Bacula) <%r>" -s "Bacula: Intervention needed for %j" %r
    

    3) You can get the full configuration information of a job (the information is the same as above, but for a given job name, which could be taken from the first command above, it is not necessary to output all the configurations every time):

    srvbkp@local # bconsole 
    Connecting to Director localhost:9101
    1000 OK: 1 srvbkp-dir Version: 7.0.5 (28 July 2014)
    Enter a period to cancel a command.
    *show jobs=srv2-dns
    Job: name=srv2-dns JobType=66 level= Priority=10 Enabled=1
         MaxJobs=1 Resched=0 Times=0 Interval=1,800 Spool=0 WritePartAfterJob=1
         Accurate=0
      --> Client: name=srv2-dns address=192.168.0.101 FDport=9102 MaxJobs=1
          JobRetention=1 month  FileRetention=1 month  AutoPrune=1
      --> Catalog: name=allbackup address=localhost DBport=0 db_name=bacula
          db_driver=*None* db_user=bacula MutliDBConn=0
      --> FileSet: name=bind
          O MZ6
          N
          I /var/lib/named
          N
      --> Schedule: name=bind
      --> Run Level=Full
          hour=20 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=0 
          wom=0 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
      --> Run Level=Differential
          hour=20 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=0 
          wom=1 2 3 4 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
      --> Run Level=Incremental
          hour=20 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=1 2 3 4 5 6 
          wom=0 1 2 3 4 5 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
      --> Storage: name=bind address=192.168.0.10 SDport=9103 MaxJobs=10
          DeviceName=bind MediaType=File StorageId=17
      --> Pool: name=Default PoolType=Backup
          use_cat=1 use_once=0 cat_files=1
          max_vols=100 auto_prune=1 VolRetention=1 year 
          VolUse=0 secs recycle=1 LabelFormat=*None*
          CleaningPrefix=*None* LabelType=0
          RecyleOldest=0 PurgeOldest=0 ActionOnPurge=0
          MaxVolJobs=0 MaxVolFiles=0 MaxVolBytes=53687091200
          MigTime=0 secs MigHiBytes=0 MigLoBytes=0
          JobRetention=0 secs FileRetention=0 secs
      --> Pool: name=bind-full PoolType=Backup
          use_cat=1 use_once=1 cat_files=1
          max_vols=0 auto_prune=1 VolRetention=2 months 
          VolUse=0 secs recycle=1 LabelFormat=bind-full
          CleaningPrefix=*None* LabelType=0
          RecyleOldest=0 PurgeOldest=0 ActionOnPurge=0
          MaxVolJobs=0 MaxVolFiles=0 MaxVolBytes=0
          MigTime=0 secs MigHiBytes=0 MigLoBytes=0
          JobRetention=0 secs FileRetention=0 secs
      --> Pool: name=bind-incr PoolType=Backup
          use_cat=1 use_once=0 cat_files=1
          max_vols=0 auto_prune=1 VolRetention=7 days 
          VolUse=23 hours  recycle=1 LabelFormat=bind-incr
          CleaningPrefix=*None* LabelType=0
          RecyleOldest=0 PurgeOldest=0 ActionOnPurge=0
          MaxVolJobs=0 MaxVolFiles=0 MaxVolBytes=0
          MigTime=0 secs MigHiBytes=0 MigLoBytes=0
          JobRetention=0 secs FileRetention=0 secs
      --> Pool: name=bind-diff PoolType=Backup
          use_cat=1 use_once=0 cat_files=1
          max_vols=0 auto_prune=1 VolRetention=1 month 1 day 
          VolUse=0 secs recycle=1 LabelFormat=bind-diff
          CleaningPrefix=*None* LabelType=0
          RecyleOldest=0 PurgeOldest=0 ActionOnPurge=0
          MaxVolJobs=0 MaxVolFiles=0 MaxVolBytes=0
          MigTime=0 secs MigHiBytes=0 MigLoBytes=0
          JobRetention=0 secs FileRetention=0 secs
      --> Messages: name=Standard
          mailcmd=/usr/sbin/bsmtp -h localhost -f "(Bacula) <%r>" -s "Bacula: %t %e of %c %l" %r
          opcmd=/usr/sbin/bsmtp -h localhost -f "(Bacula) <%r>" -s "Bacula: Intervention needed for %j" %r
    

    4) Lists all jobs’ status – ID, StartTime, Type (backup?), Level (Full, increment, differential?), Files and bytes processed and the status of the job (Terminated normally, Running,Fatal error and so on). Found out if you have backups of a server or the backup process failed!

    srvbkp@local # bconsole 
    Connecting to Director localhost:9101
    1000 OK: 1 srvbkp-dir Version: 7.0.5 (28 July 2014)
    Enter a period to cancel a command.
    *list jobs
    +-------+--------------------------------+---------------------+------+-------+-----------+-----------------+-----------+
    | JobId | Name                           | StartTime           | Type | Level | JobFiles  | JobBytes        | JobStatus |
    +-------+--------------------------------+---------------------+------+-------+-----------+-----------------+-----------+
    |   128 | srv1-test                      | 2016-12-04 23:05:00 | B    | F     |    17,506 |      52,116,400 | T         |
    |   178 | srv1-test                      | 2016-12-09 23:05:01 | B    | I     |        13 |           1,509 | T         |
    |   188 | srv1-test                      | 2016-12-10 23:05:01 | B    | I     |        13 |           1,509 | T         |
    .........................................................................................................................
    | 8,927 | srv2-images                    | 2018-03-04 20:00:00 | B    | F     |         0 |               0 | f         |
    | 8,928 | srv1-media                     | 2018-03-04 20:00:00 | B    | F     |         3 |             978 | T         |
    | 8,930 | srv1-dns                       | 2018-03-04 20:00:01 | B    | F     |         6 |           1,843 | T         |
    | 8,932 | srv2-dns                       | 2018-03-04 20:00:01 | B    | F     |         6 |           1,837 | T         |
    | 8,931 | srv3-dns                       | 2018-03-04 20:00:03 | B    | F     |         5 |           1,542 | T         |
    | 8,933 | srv4-dns                       | 2018-03-04 20:00:04 | B    | F     |         4 |           1,258 | T         |
    | 8,934 | srv5-dns                       | 2018-03-04 20:00:04 | B    | F     |         4 |           1,258 | T         |
    +-------+--------------------------------+---------------------+------+-------+-----------+-----------------+-----------+
    

    5) Which files were included in a backup job? Lists all paths and files included in the backup job (the ID is from the above command):

    *list files jobid=8934
    +----------+
    | Filename |
    +----------+
    | /var/lib/named/ |
    | /var/lib/named/root.cache |
    | /var/lib/named/sec |
    | /var/lib/named/sec/example.com.db |
    | /var/lib/named/sec/example2.net.db |
    | /var/lib/named/pri |
    +----------+
    +-------+----------+---------------------+------+-------+----------+----------+-----------+
    | JobId | Name     | StartTime           | Type | Level | JobFiles | JobBytes | JobStatus |
    +-------+----------+---------------------+------+-------+----------+----------+-----------+
    | 8,934 | srv5-dns | 2018-03-04 20:00:20 | B    | F     |        6 |    1,851 | T         |
    +-------+----------+---------------------+------+-------+----------+----------+-----------+
    

    6) Get the scheduled jobs. Which jobs will be executed and when:

    *status dir
    Scheduled Jobs:
    Level          Type     Pri  Scheduled          Job Name           Volume
    ===================================================================================
    Incremental    Backup    10  06-Mar-18 20:00    srv1-dns           *unknown*
    Incremental    Backup    10  06-Mar-18 20:00    srv2-dns           *unknown*
    Incremental    Backup    10  06-Mar-18 20:00    srv3-dns           *unknown*
    Incremental    Backup    10  06-Mar-18 20:00    srv4-dns           *unknown*
    Incremental    Backup    10  06-Mar-18 20:00    srv5-dns           *unknown*
    ...................................................................................
    Incremental    Backup    10  06-Mar-18 23:05    srv1-media         *unknown*
    Full           Backup    10  06-Mar-18 23:05    srv1-images        *unknown*
    ====
    Running Jobs:
    Console connected at 06-Mar-18 13:36
    No Jobs running.
    ====
    Terminated Jobs:
     JobId  Level    Files      Bytes   Status   Finished        Name
    ====================================================================
      9006  Incr        472    296.8 M  OK       05-Mar-18 23:05 srv1-dns
      9007  Incr     10,547    194.8 M  Error    05-Mar-18 23:05 srv2-dns
      9002  Incr         37    133.0 M  OK       05-Mar-18 23:05 srv3-dns
      8995  Incr         57    372.2 M  OK       05-Mar-18 23:06 srv4-dns
      9000  Incr        391    1.195 G  OK       05-Mar-18 23:07 srv5-dns
      9008  Full        832    7.139 G  OK       05-Mar-18 23:49 srv1-images
      9009  Full          1    1.493 G  OK       05-Mar-18 23:50 srv1-media
      9011  Full    315,027    121.6 G  OK       06-Mar-18 03:44 srv2-images
      9012  Full    314,804    93.85 G  OK       06-Mar-18 04:18 srv2-media
    ====
    *
    
  • Storages

  • Where are the backup files on your system. Trace the bacula media devices to the real path of your backup files.
    *status storage
    Automatically selected Storage: bind
    Connecting to Storage daemon bind at 192.168.0.10:9103
    srvbkp-sd Version: 7.0.5 (28 July 2014) x86_64-pc-linux-gnu ubuntu 16.04
    Daemon started 06-Nov-17 17:25. Jobs: run=5025, running=0.
     Heap: heap=135,168 smbytes=2,231,640 max_bytes=5,264,027 bufs=439 max_bufs=2,152
     Sizes: boffset_t=8 size_t=8 int32_t=4 int64_t=8 mode=0,0
    Running Jobs:
    No Jobs running.
    ====
    Jobs waiting to reserve a drive:
    ====
    Terminated Jobs:
     JobId  Level    Files      Bytes   Status   Finished        Name
    ===================================================================
      9071  Incr          0         0   OK       06-Mar-18 20:00 srv1-dns
      9074  Incr          0         0   OK       06-Mar-18 20:00 srv2-dns
      9073  Incr          0         0   OK       06-Mar-18 20:00 srv3-dns
      9075  Incr          5    2.043 K  OK       06-Mar-18 20:00 srv4-dns
      9078  Incr          5    2.042 K  OK       06-Mar-18 20:00 srv5-dns
      9077  Incr          0         0   OK       06-Mar-18 20:00 srv1-media
      9079  Incr          0         0   OK       06-Mar-18 20:00 srv1-images
      9076  Incr          0         0   OK       06-Mar-18 20:00 srv2-images
      9057  Full          0         0   Other    06-Mar-18 20:31 srv2-media
    ====
    Device status:
    Device "localstorage" (/mnt/storage1/bacula-storage/local) is not open.
    ==
    Device "media" (/mnt/storage1/bacula-storage/media) is not open.
    ==
    Device "bind" (/mnt/storage1/bacula-storage/bind) is not open.
    ==
    Device "image" (/mnt/storage1/bacula-storage/image) is not open.
    ==
    ====
    Used Volume status:
    ====
    Attr spooling: 0 active jobs, 34,753 bytes; 120 total jobs, 34,753 max bytes.
    ====
    *
    
  • Clients

    1) Show all client names in the bacula system, this could be useful to link a client name with a server and then to use the name in the next command (below in 2):

    *show client
    Client: name=srvbkp-fd address=192.168.0.5 FDport=9102 MaxJobs=1
          JobRetention=3 months  FileRetention=2 months  AutoPrune=1
      --> Catalog: name=allbackup address=localhost DBport=0 db_name=bacula
          db_driver=*None* db_user=bacula MutliDBConn=0
    Client: name=srv1-dns address=192.168.0.100 FDport=9102 MaxJobs=1
          JobRetention=1 month  FileRetention=1 month  AutoPrune=1
      --> Catalog: name=allbackup address=localhost DBport=0 db_name=bacula
          db_driver=*None* db_user=bacula MutliDBConn=0
    Client: name=srv2-dns address=192.168.0.101 FDport=9102 MaxJobs=1
          JobRetention=1 month  FileRetention=1 month  AutoPrune=1
      --> Catalog: name=allbackup address=localhost DBport=0 db_name=bacula
          db_driver=*None* db_user=bacula MutliDBConn=0
    Client: name=srv3-dns address=192.168.0.103 FDport=9102 MaxJobs=1
          JobRetention=1 month  FileRetention=1 month  AutoPrune=1
      --> Catalog: name=allbackup address=localhost DBport=0 db_name=bacula
          db_driver=*None* db_user=bacula MutliDBConn=0
    Client: name=srv4-dns address=192.168.0.104 FDport=9102 MaxJobs=1
          JobRetention=1 month  FileRetention=1 month  AutoPrune=1
      --> Catalog: name=allbackup address=localhost DBport=0 db_name=bacula
          db_driver=*None* db_user=bacula MutliDBConn=0
    Client: name=srv5-dns address=192.168.0.105 FDport=9102 MaxJobs=1
          JobRetention=1 month  FileRetention=1 month  AutoPrune=1
      --> Catalog: name=allbackup address=localhost DBport=0 db_name=bacula
          db_driver=*None* db_user=bacula MutliDBConn=0
    Client: name=srv1-media address=192.168.0.106 FDport=9102 MaxJobs=1
          JobRetention=1 month  FileRetention=1 month  AutoPrune=1
      --> Catalog: name=allbackup address=localhost DBport=0 db_name=bacula
          db_driver=*None* db_user=bacula MutliDBConn=0
    Client: name=srv1-images address=192.168.0.107 FDport=9102 MaxJobs=1
          JobRetention=1 month  FileRetention=1 month  AutoPrune=1
      --> Catalog: name=allbackup address=localhost DBport=0 db_name=bacula
          db_driver=*None* db_user=bacula MutliDBConn=0
    *
    

    2) Show status of a client. We can use this command to check what is going on with the client at the moment of issuing the command, the last terminated backup jobs and their status. In addition we can check the connection between the Director daemon and the client daemon, because the Director connects at the moment we issue the command, so it is useful for debugging purposes:

    *status client=srv1-dns
    Connecting to Client srv1-dns at 192.168.0.100:9102
    
    srv1-dns-fd Version: 7.0.5 (28 July 2014)  x86_64-pc-linux-gnu ubuntu 16.04
    Daemon started 23-Feb-18 00:43. Jobs: run=8 running=0.
     Heap: heap=98,304 smbytes=188,701 max_bytes=571,361 bufs=64 max_bufs=97
     Sizes: boffset_t=8 size_t=8 debug=0 trace=0 mode=0,0 bwlimit=0kB/s
     Plugin: bpipe-fd.so 
    
    Running Jobs:
    Director connected at: 06-Mar-18 22:51
    No Jobs running.
    ====
    
    Terminated Jobs:
     JobId  Level    Files      Bytes   Status   Finished        Name 
    ===================================================================
      1832  Full          4    1.333 K  OK       01-Mar-18 23:48 srv1-dns
      1836  Incr          0         0   OK       02-Mar-18 00:01 srv1-dns
      1864  Incr          0         0   OK       02-Mar-18 20:30 srv1-dns
      1907  Incr          0         0   OK       03-Mar-18 20:00 srv1-dns
      1950  Full          4    1.333 K  OK       04-Mar-18 20:01 srv1-dns
      1994  Incr          0         0   OK       05-Mar-18 20:00 srv1-dns
      1037  Incr          0         0   OK       06-Mar-18 20:00 srv1-dns
    ====
    *
    
  • Filesets

    Which files will be included or excluded from the backup process. The lines starting with “I” mean “include”, the lines starting with “E” mean exclude.

     *show fileset
    FileSet: name=Full Set
     O M
     N
     I /usr/sbin
     N
     E /var/lib/bacula
     E /proc
     E /tmp
     E /sys
     E /.journal
     E /.fsck
     N
    FileSet: name=Catalog
     O M
     N
     I /var/lib/bacula/bacula.sql
     N
    FileSet: name=images
     O MfZ6
     N
     I /
     N
     E /proc
     E /tmp
     E /run
     E /dev
     E /sys
     N
    FileSet: name=bind
     O MZ6
     N
     I /var/lib/named
     N
    FileSet: name=media
     O MfZ6
     N
     I /
     N
     E /proc
     E /tmp
     E /run
     E /dev
     E /sys
     N
    
  • Schedule

    1) The all timeline plans for taking backups

    *show schedule
    Schedule: name=WeeklyCycle
      --> Run Level=Full
          hour=23 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=0 
          wom=0 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=5
      --> Run Level=Differential
          hour=23 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=0 
          wom=1 2 3 4 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=5
      --> Run Level=Incremental
          hour=23 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=1 2 3 4 5 6 
          wom=0 1 2 3 4 5 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=5
    Schedule: name=WeeklyCycleAfterBackup
      --> Run Level=Full
          hour=23 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=0 1 2 3 4 5 6 
          wom=0 1 2 3 4 5 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=10
    Schedule: name=images
      --> Run Level=Full
          hour=10 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=0 
          wom=0 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
      --> Run Level=Differential
          hour=10 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=0 
          wom=1 2 3 4 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
      --> Run Level=Incremental
          hour=20 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=1 2 3 4 5 6 
          wom=0 1 2 3 4 5 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
    

    2) The schedule plan for one client or groups of clients (server/s):

    *show schedule=bind
    Schedule: name=bind
      --> Run Level=Full
          hour=20 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=0 
          wom=0 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
      --> Run Level=Differential
          hour=20 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=0 
          wom=1 2 3 4 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
      --> Run Level=Incremental
          hour=20 
          mday=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
          month=0 1 2 3 4 5 6 7 8 9 10 11 
          wday=1 2 3 4 5 6 
          wom=0 1 2 3 4 5 
          woy=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
          mins=0
    
  • Director

    1) Show last messages of the backup processes. As you can see there is an error in one of the jobs, this error means that the client did not connect to the backup daemon (probably the same server with the Director), the problem was the firewall did not allow connections from this client (IP):

    06-Mar 20:00 srvbkp-dir JobId 1075: Start Backup JobId 1075, Job=srv1-bind.2018-03-06_20.00.01_05
    06-Mar 20:00 srvbkp-dir JobId 1075: Using Device "bind" to write.
    06-Mar 20:00 srvbkp-sd JobId 1066: Elapsed time=00:00:10, Transfer rate=0  Bytes/second
    06-Mar 20:00 srvbkp-dir JobId 1066: Bacula srvbkp-dir 7.0.5 (28Jul14):
      Build OS:               x86_64-pc-linux-gnu ubuntu 16.04
      JobId:                  1066
      Job:                    srv1-media.2018-03-06_20.00.00_56
      Backup Level:           Incremental, since=2018-03-06 20:00:14
      Client:                 "srv1-media" 7.0.5 (28Jul14) x86_64-pc-linux-gnu,ubuntu,16.04
      FileSet:                "bind" 2017-11-07 17:19:45
      Pool:                   "bind-incr" (From Job IncPool override)
      Catalog:                "allbackup" (From Client resource)
      Storage:                "bind" (From Job resource)
      Scheduled time:         06-Mar-2018 20:00:00
      Start time:             06-Mar-2018 20:00:15
      End time:               06-Mar-2018 20:00:26
      Elapsed time:           11 secs
      Priority:               10
      FD Files Written:       0
      SD Files Written:       0
      FD Bytes Written:       0 (0 B)
      SD Bytes Written:       0 (0 B)
      Rate:                   0.0 KB/s
      Software Compression:   None
      VSS:                    no
      Encryption:             no
      Accurate:               no
      Volume name(s):        
      Volume Session Id:      1025
      Volume Session Time:    1509989534
      Last Volume Bytes:      4,618 (4.618 KB)
      Non-fatal FD errors:    0
      SD Errors:              0
      FD termination status:  OK
      SD termination status:  OK
      Termination:            Backup OK
    06-Mar 20:01 srvbkp-dir JobId 1057: Using Device "bind" to write.
    06-Mar 20:05 srv2-dns-fd JobId 1057: Warning: bsock.c:112 Could not connect to Storage daemon on 192.168.0.5:9103. ERR=Connection timed out
    Retrying ...
    06-Mar 20:31 srv2-dns-fd JobId 1057: Fatal error: bsock.c:118 Unable to connect to Storage daemon on 192.168.0.5:9103. ERR=Interrupted system call
    06-Mar 20:31 srv2-dns-fd JobId 1057: Fatal error: job.c:1893 Failed to connect to Storage daemon: 192.168.0.5:9103
    06-Mar 20:31 srvbkp-dir JobId 1057: Fatal error: Bad response to Storage command: wanted 2000 OK storage
    , got 2902 Bad storage
    06-Mar 20:31 srvbkp-dir JobId 1057: Error: Bacula srvbkp-dir 7.0.5 (28Jul14):
      Build OS:               x86_64-pc-linux-gnu ubuntu 16.04
      JobId:                  1057
      Job:                    srv2-dns.2018-03-06_20.00.00_47
      Backup Level:           Full (upgraded from Incremental)
      Client:                 "srv2-dns" 7.0.5 (28Jul14) x86_64-pc-linux-gnu,ubuntu,16.04
      FileSet:                "bind" 2017-11-07 17:19:45
      Pool:                   "bind-full" (From Job FullPool override)
      Catalog:                "allbackup" (From Client resource)
      Storage:                "bind" (From Job resource)
      Scheduled time:         06-Mar-2018 20:00:00
      Start time:             06-Mar-2018 20:00:00
      End time:               06-Mar-2018 20:31:22
      Elapsed time:           31 mins 22 secs
      Priority:               10
      FD Files Written:       0
      SD Files Written:       0
      FD Bytes Written:       0 (0 B)
      SD Bytes Written:       0 (0 B)
      Rate:                   0.0 KB/s
      Software Compression:   None
      VSS:                    no
      Encryption:             no
      Accurate:               no
      Volume name(s):        
      Volume Session Id:      1201
      Volume Session Time:    1509989534
      Last Volume Bytes:      1 (1 B)
      Non-fatal FD errors:    2
      SD Errors:              0
      FD termination status:  Error
      SD termination status:  Waiting on FD
      Termination:            *** Backup Error ***
    

    2) reload – reload the configuration files of bacula system. The daemons will re-read all configuration files in “/etc/bacula”. Unfortunately there is no output:

    *reload
    *