Adaugare Disk: Difference between revisions

From Linux Wiki
Jump to navigation Jump to search
Tag: Reverted
No edit summary
Tag: Manual revert
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
== Configurarea Raspberry Pi ca server NTP folosint NEO-7M ==
== Adaugare disk live in Ubuntu 2X.04 LTS ==
Un server NTP asigura sincronizarea corecta a orei pentru toate dispozitivele dintr-o retea, prevenind erori in loguri, autentificari sau servicii care depind de timp precis. Folosind un modul GPS cu PPS, un Raspberry Pi poate deveni o sursa Stratum‑1 foarte stabila si independenta de internet. Acest proiect prezinta configurarea unui astfel de server NTP simplu si fiabil pentru uz local.


=== Configurare UART si activare PPS ===
Cu serverul pornit verificam care sunt disk-urile atasate si ce partitii sunt prezente:
Pe Raspberry Pi, consola seriala este activa implicit, ceea ce blocheaza utilizarea interfetei UART pentru modulul GPS. Pentru a putea folosi portul serial si semnalul PPS, este necesara dezactivarea consolei si activarea manuala a suportului UART si PPS.
 
==== Dezactivarea consolei seriale ====
Pentru dezactivarea consolei seriale editam fisierul /boot/firmware/cmdline.txt de unde stergem segmentul care contine consola, de obicei ceva de forma:


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;console=serial0,115200
--># lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
......
sda                        8:0    0    20G  0 disk
├─sda1                      8:1    0    1M  0 part
├─sda2                      8:2    0  1.8G  0 part /boot
└─sda3                      8:3    0  18.2G  0 part
&#32; └─ubuntu--vg-ubuntu--lv 253:0    0  18.2G  0 lvm  /
......
</code>
</code>


Lasam restul liniei pe un singur rand, exact cum era.
=== Adaugare HDD ===
 
Procedam la introducerea noului disk virtual in hypervisor (ex Proxmox VM):
 
<gallery>
File:Pve01.png
File:Pve02.png
File:Pve03b.png
</gallery>


==== Verificarea activarii UART ====
Fara a restarta masina virtuala si fara a fi nevoie de rescanarea interfetelor scsi, noul disk apare in OS:
Editam fisierul /boot/firmware/config.txt unde ne asiguram ca exista:


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;[all]
--># lsblk
&#32;enable_uart=1
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
......
sda                        8:0    0    20G  0 disk
├─sda1                      8:1    0    1M  0 part
├─sda2                      8:2    0  1.8G  0 part /boot
└─sda3                      8:3    0  18.2G  0 part
&#32; └─ubuntu--vg-ubuntu--lv 253:0    0  18.2G  0 lvm  /
'''sdb                        8:16  0    10G  0 disk'''
......
</code>
</code>


==== Activarea modulului PPS ====
==== Partitionare si Formatare cu fisk====
Incarcam modulul PPS executand:
 
Pentru partitionarea si formatarea sdb vom folosi in ceea ce urmeaza utilitarul fDisk. Comenzile introduse for fi marcate in <span style="color:#f00">'''bold'''</span>:
 
<blockquote>
Atentie !!!<br>
Pentru partitioanarea si formatarea disk-urilor mai mari de 2TB se va folosii utilitarul Parted
</blockquote>


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;echo 'pps-gpio' >> /etc/modules
--># <span style="color:#f00">'''fdisk /dev/sdb'''</span>
&#32;
Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
&#32;
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x94288925.
&#32;
Command (m for help): <span style="color:#f00">'''n'''</span>
Partition type
&#32;  p  primary (0 primary, 0 extended, 4 free)
&#32;  e  extended (container for logical partitions)
Select (default p): <span style="color:#f00">'''p'''</span>
Partition number (1-4, default 1): <span style="color:#f00">'''1'''</span>
First sector (2048-20971519, default 2048): <span style="color:#f00"><--ENTER</span>
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-20971519, default 20971519): <span style="color:#f00"><--ENTER</span>
&#32;
Created a new partition 1 of type 'Linux' and of size 10 GiB.
&#32;
Command (m for help): <span style="color:#f00">'''t'''</span>
Selected partition 1
Hex code or alias (type L to list all): <span style="color:#f00">'''8e'''</span>
Changed type of partition 'Linux' to 'Linux LVM'.
&#32;
Command (m for help): <span style="color:#f00">'''w'''</span>
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
</code>
</code>


Pentru configurarea pinului PPS (GPIO 18) editam din nou fisierul /boot/firmware/config.txt iar in partea de jos adaugam:
==== Partitionare si Formatare cu parted ====
 
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;dtoverlay=pps-gpio,gpiopin=18
-->&#32;to be added
</code>
</code>


Aceasta indica kernelului ca semnalul PPS este conectat la GPIO 18.
==== Adaugare disk la nivel de OS ====


Dupa ce efectuam aceste modificari, oprim sistemul in vederea conectarii modului de GPS NEO-7M.
Dupa partitionarea la nivel de disk, creem partitia la nivel de OS:


=== Conectarea modului GPS ===
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
Dupa dezactivarea consolei seriale si activarea suportului PPS, interfata UART a Raspberry Pi devine libera pentru comunicarea cu modulul GPS. Conectarea se face direct pe pinii GPIO, folosind alimentarea de 5V, masa comuna si liniile de date RX/TX, plus semnalul PPS.
--># pvcreate /dev/sdb1
&#32; Physical volume "/dev/sdb1" successfully created.
</code>


==== Schema de conectare ====
Facem o noua listare pentru a fi siguri ca partitia a fost adaugata:
 
[[File:GPIOtoGPS.jpg|800px|none|Pagina GPIOtoGPS]]


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
--># lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
......
sda                        8:0    0    20G  0 disk
├─sda1                      8:1    0    1M  0 part
├─sda2                      8:2    0  1.8G  0 part /boot
└─sda3                      8:3    0  18.2G  0 part
&#32; └─ubuntu--vg-ubuntu--lv 253:0    0  18.2G  0 lvm  /
sdb                        8:16  0    10G  0 disk
'''└─sdb1                      8:17  0    10G  0 part'''
......
</code>


* Conectam pinul de 5V al Raspberry Pi la pinul de alimentare al modulului GPS.
=== Creare volume group si logical volume ===
* Conectam GND la masa modulului GPS.
* Conectam TX0 de pe Raspberry Pi la RX al modulului GPS (Pi transmite → GPS primeste).
* Conectam RX0 de pe Raspberry Pi la TX al modulului GPS (GPS transmite → Pi primeste).
* Conectam GPIO 18 la pinul PPS al modulului GPS, conform configurarii din config.txt


=== Test pentru UART si PPS ===
In continuare vom adauga pe noul disk un grup vg_wiki si doua volume logice lv_wiki_1 respectiv lv_wiki_2. Din cauza hearede-lor ce se scriu pe disk, partitia finala nu va fi de exact 10GB, motiv pentru care vom creea un LV de 6GB iar celui de al doi-lea LV ii vom aloca spatiul ramas <4GB:
Dupa conectarea modulului GPS si configurarea UART/PPS, putem verifica functionarea celor doua interfete direct din sistem.


==== Test UART (NMEA) ====
==== Creeare VG ====
Pentru a verifica daca modulul GPS transmite date NMEA prin UART:


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;cat /dev/serial0
--># vgcreate vg_wiki /dev/sdb1
&#32;to be added
&#32; Volume group "vg_wiki" successfully created
&#32;
&#32;to be added
&#32;
&#32;to be added
</code>
</code>


Acest rezultat confirma faptul ca Pi-ul primeste date GPS de la modulul NEO-7M
Afisarea info grupului vg_wiki:
Daca totul este configurat corect, ar trebui sa apara siruri NMEA. In cazul in care nu apare asemenator mai sus, verificati conexiunile RX/TX si setarile UART.


==== Instalare unelte PPS si testare ====
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
Pentru testarea semnalului PPS, instalati pachetul necesar:
--># vgdisplay vg_wiki
&#32; --- Volume group ---
&#32; '''VG Name              vg_wiki'''
&#32; System ID
&#32; Format                lvm2
&#32; Metadata Areas        1
&#32; Metadata Sequence No  1
&#32; VG Access            read/write
&#32; '''VG Status            resizable'''
&#32; MAX LV                0
&#32; Cur LV                0
&#32; Open LV              0
&#32; Max PV                0
&#32; Cur PV                1
&#32; Act PV                1
&#32; '''VG Size              <10.00 GiB'''
&#32; PE Size              4.00 MiB
&#32; Total PE              2559
&#32; Alloc PE / Size      0 / 0
&#32; Free  PE / Size      2559 / <10.00 GiB
&#32; VG UUID              PHAdU8-r8h2-vG36-gGMU-1ydU-nfgc-CREym8
</code>


* apt install pps-tools
==== Creeare LV ====


Dupa instalare, verificam semnalul PPS:
In interiorul grupului mai sus creeat vom ceea doua volume logice numite lv_wiki_1 si lv_wiki_2
lv_wiki_1 va avea o dimensiune de 6GB si va fi inclus in vg_wiki:


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;ppstest /dev/pps0
--># lvcreate -n lv_wiki_1 -L 6G vg_wiki
&#32;to be added
&#32; Logical volume "lv_wiki_1" created.
&#32;
&#32;to be added
&#32;
&#32;to be added
</code>
</code>


Un rezultat corect va afisa impulsuri detectate la fiecare secunda.
Vom afisa informatiile noului volum:


=== Configurare gpsd ===
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
Instalam pachetele necesare pentru gestionarea modulului GPS:
--># lvdisplay vg_wiki/lv_wiki_1
* apt install gpsd gpsd-clients
&#32; --- Logical volume ---
&#32; '''LV Path                /dev/vg_wiki/lv_wiki_1'''
&#32; LV Name                lv_wiki_1
&#32; VG Name                vg_wiki
&#32; LV UUID                734OGs-T40C-Swmg-p7Tb-uc7M-LeYA-mBa6iB
&#32; LV Write Access        read/write
&#32; LV Creation host, time docker, 2023-04-14 15:40:48 +0000
&#32; LV Status              available
&#32; # open                0
&#32; '''LV Size                6.00 GiB'''
&#32; Current LE            1536
&#32; Segments              1
&#32; Allocation            inherit
&#32; Read ahead sectors    auto
&#32; - currently set to    256
&#32; Block device          253:1
</code>


==== Startup config pentru gpsd ====
Din cauza inexactitatilor prezentate anterior, cel de-al doi-lea volum va avea aprox. 4GB  si va fi inclus in vg_wiki. Din header-elor de disk ii vom aloca lui lv_wiki_2 spatiul ramas disponibil dupa ceerea lui lv_wiki_1:
Editam fisierul de configurare gpsd:


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;<b># nano /etc/default/gpsd</b>
--># lvcreate -l 100%FREE -n lv_wiki_2 vg_wiki
&#32;
&#32; Logical volume "lv_wiki_2" created.
&#32;START_DAEMON="true"
&#32;DEVICES="/dev/serial0 /dev/pps0"
&#32;GPSD_OPTIONS="-n"
&#32;USBAUTO="false"
&#32;GPSD_SOCKET="/var/run/gpsd.sock"
</code>
</code>


* START_DAEMON -> Porneste automat serviciul gpsd la boot. Daca este "false", gpsd nu se lanseaza singur.
Vom afisa informatiile noului volum:
* DEVICES -> Aceasta linie indica gpsd sa deschida doua dispozitive simultan
** /dev/serial0 → fluxul NMEA provenit de pe UART (datele GPS clasice: GGA, RMC, sateliti etc.)
** /dev/pps → semnalul PPS hardware folosit pentru sincronizare precisa la nivel de secunda
* GPSD_OPTIONS -> Porneste gpsd chiar daca nu exista clienti conectati. Fara "-n", gpsd asteapta un client inainte sa initializeze modulul GPS.
* USBAUTO -> Dezactiveaza detectarea automata a dispozitivelor GPS USB; necesar cand folosim un modul pe UART.
* GPSD_SOCKET -> Defineste socket-ul UNIX prin care aplicatiile (cgps, chrony etc.) comunica cu gpsd.


Repornim serviciul executand:
Facem o noua listare pentru a fi siguri ca partitia a fost adaugata:
* service gpsd restart
 
==== Testare gpsd ====
Testam functionarea modulului GPS:


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;# cgps -s
--># lvdisplay vg_wiki/lv_wiki_2
&#32;to be added
&#32; --- Logical volume ---
&#32; '''LV Path                /dev/vg_wiki/lv_wiki_2'''
&#32; LV Name                lv_wiki_2
&#32; VG Name                vg_wiki
&#32; LV UUID                BpjFe1-4tcQ-u3f7-nDfd-yVrv-zYFc-8I8CRy
&#32; LV Write Access        read/write
&#32; LV Creation host, time docker, 2023-04-14 15:42:59 +0000
&#32; LV Status              available
&#32; # open                0
&#32; '''LV Size                <4.00 GiB'''
&#32; Current LE            1023
&#32; Segments              1
&#32; Allocation            inherit
&#32; Read ahead sectors    auto
&#32; - currently set to     256
&#32; Block device          253:2
</code>
</code>


==== Scriere File System ====


 
Pe fiecare dintre cele doua LV-uri create vom marca filesystem-ul, in cazul de fata vom folosi ext4
=== Configurarea serverului NTP ===
Pentru creearea lul lv_wiki_1 vom executa:
Acest server foloseste un modul GPS cu suport PPS pentru a furniza timp de inalta precizie, transformand sistemul intr-o sursa NTP stratum 1. In pasii urmatori configuram Chrony astfel incat sa foloseasca exclusiv GPS si PPS ca referinte de timp.
 
==== Instalare Chrony ====
Inainte de instalare ne asiguram ca sistemul foloseste un singur serviciu NTP (Chrony va deveni sursa principala).
* apt install chrony
 
==== Verificarea surselor NTP initiale ====


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;# chronyc sources
--># <span style="color:#f00">'''mkfs -t ext4 -v /dev/vg_wiki/lv_wiki_1'''</span>
&#32;to be added
mke2fs 1.46.5 (30-Dec-2021)
&#32;# chronyc tracking
fs_types for mke2fs.conf resolution: 'ext4'
&#32;to be added
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
393216 inodes, 1572864 blocks
78643 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1610612736
48 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Filesystem UUID: da82776f-41ba-453d-a7c6-4e6ca5b48164
Superblock backups stored on blocks:
&#32;       32768, 98304, 163840, 229376, 294912, 819200, 884736
&#32;
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
</code>
</code>


chronyc sources afiseaza sursele NTP publice pe care sistemul le foloseste implicit, inainte de configurarea GPS‑ului.
Iar pentru creearea lui lv_wiki_2 executam:
chronyc tracking arata ca sistemul functioneaza momentan ca stratum 3, fiind doar un client NTP obisnuit.
 
==== Editare configuratie Chrony ====
In aceasta etapa eliminam sursele NTP publice si configuram Chrony sa foloseasca exclusiv GPS (NMEA) si PPS ca referinte de timp. Ajustam parametrii de corectie initiala si stabilim PPS ca sursa principala, astfel incat serverul sa poata functiona ca stratum 1. Rezultatul final este un server NTP autonom, sincronizat direct din semnal GPS cu precizie sub‑microsecunda.


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;<b># nano /etc/chrony/chrony.conf</b>
--># <span style="color:#f00">'''mkfs -t ext4 -v /dev/vg_wiki/lv_wiki_2'''</span>
&#32;
mke2fs 1.46.5 (30-Dec-2021)
&#32;#pool 2.debian.pool.ntp.org iburst
fs_types for mke2fs.conf resolution: 'ext4'
&#32;makestep 0.1 -1
Discarding device blocks: done
&#32;initstepslew 1.0 GPS
Filesystem label=
&#32;
OS type: Linux
&#32;# GPS serial time (NMEA)
Block size=4096 (log=2)
&#32;refclock SHM 0 delay 0.2 refid GPS poll 4 noselect
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
262144 inodes, 1047552 blocks
52377 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Filesystem UUID: 129fbbee-e190-4a49-aa8f-ebdffb56c7bb
Superblock backups stored on blocks:
&#32;       32768, 98304, 163840, 229376, 294912, 819200, 884736
&#32;
&#32;
&#32;# PPS precise time
Allocating group tables: done
&#32;refclock PPS /dev/pps0 refid PPS lock GPS poll 4 prefer
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
</code>
</code>


<b>2.debian.pool.ntp.org</b> este serverul NTP public folosit initial de catre chrony.
La final verificam corectitudinea disk-urilor:
<b>makestep</b> permite corectii mari de timp atunci cand diferenta este prea mare pentru slew. Modificam din initialul "1.0 3" pentru a permite corectii oricand, cu limita mai mica.
<b>initstepslew</b> corecteaza timpul la boot daca diferenta fata de GPS este mai mare de 1 secunda.
 
===== refclock SHM (NMEA) =====
NMEA este fluxul de timp citit din GPS prin gpsd si expus catre Chrony printr-un segment SHM (shared memory). Acest semnal conhine ora completa, dar are o intarziere naturala de aproximativ 200 ms si o precizie relativ slaba. Îl folosim cu noselect pentru ca nu vrem ca NMEA sa fie sursa principala de timp; rolul lui este doar sa ofere context temporal pentru PPS, astfel incat impulsul PPS sa poata fi „legat” corect de ora GPS.
 
===== refclock PPS =====
PPS este semnalul hardware de precizie foarte mare (sub‑microsecunda), generat o data pe secunda de modulul GPS. Spre deosebire de NMEA, PPS nu conhine ora, ci doar impulsul exact, motiv pentru care il „blocam” pe GPS (lock GPS) pentru a-i oferi contextul temporal. Îl marcam ca prefer deoarece PPS trebuie sa fie sursa principala de sincronizare, fiind cea mai precisa referinta disponibila.
 
Dupa salvarea noii configuratii restartam chrony
* service chrony restart
 
==== Verificarea surselor NTP adaugate ====


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;# chronyc sources
--># lsblk
&#32;to be added
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
&#32;# chronyc tracking
.....
&#32;to be added
sda                        8:0    0    20G  0 disk
├─sda1                      8:1    0    1M  0 part
├─sda2                      8:2    0  1.8G  0 part /boot
└─sda3                      8:3    0  18.2G  0 part
&#32; └─ubuntu--vg-ubuntu--lv 253:0    0  18.2G  0 lvm  /
sdb                        8:16  0    10G  0 disk
└─sdb1                      8:17  0    10G  0 part
&#32; '''├─vg_wiki-lv_wiki_1    253:1    0    6G  0 lvm'''
&#32; '''└─vg_wiki-lv_wiki_2    253:2    0    4G  0 lvm'''
.....
</code>
</code>


Dupa aplicarea configuratiei, Chrony incepe sa renunte la sursele NTP publice si sa foloseasca exclusiv GPS si PPS. In primele secunde, chronyc sources poate arata doar GPS, iar PPS apare abia dupa ce semnalul devine stabil. Pe masura ce PPS este validat si blocat pe GPS, chronyc tracking trece automat de la stratum 3 la stratum 1, confirmand ca serverul functioneaza acum ca o sursa autonoma de timp de inalta precizie.
=== Montarea diskurilor la nivel de system de operare ===
Pentru inserarea disk-urilor in systemul de operare vom creea doua directoare si vom edita fstab astfel incat cele doua discuri sa fie montate automat de catre OS in cazul lnui restart


==== Configurarea serverului pentru acces LAN ====
==== Creeare directoare ====


Dupa ce serverul NTP functioneaza corect pe GPS + PPS si a devenit stratum 1, urmatorul pas este sa il facem disponibil in reteaua locala. Practic, permitem dispozitivelor din LAN sa foloseasca acest server ca sursa principala de timp. Chrony nu raspunde implicit catre retea, asa ca trebuie sa activam explicit accesul pentru subnetul nostru.
Discurile vor fi adaugate in directorul /wiki, subdirectoarele lv1 respectiv lv2:


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;# nano /etc/chrony/chrony.conf
-->&#32;# mkdir /wiki
&#32;
&#32;# mkdir /wiki/lv1
&#32;allow 192.168.1.0/24
&#32;# mkdir /wiki/lv2
</code>
</code>


Dupa restart, Chrony asculta pe toate interfetele pentru UDP 123, fiind gata sa raspunda clienhilor din LAN.
Structura rezultata fiind urmatoarea:


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;# netstat -tulnp
--># tree /wiki/
&#32;
&#32;/wiki/
&#32;to be added
&#32; ├── lv1
&#32; └── lv2
&#32;2 directories, 0 files
</code>
</code>


Cu aceste setari, configurarea serverului NTP este completa. Sistemul functioneaza acum ca un server stratum 1 bazat pe GPS + PPS, stabil, autonom si gata sa ofere timp precis intregii retele. Practic, in acest punct serverul este complet operational si pregatit sa serveasca LAN‑ul
==== Colectare informatii despre partitii ====


== Configurarea clientului NTP Ubuntu ==
In fisierul de boot fstab, partiile pot fi montate in funtie de:
Clientul NTP din retea va folosi serverul nostru stratum 1 ca sursa principala de timp. Pe Ubuntu, Chrony este usor de configurat si poate inlocui rapid pool‑urile implicite cu serverul nostru local.


==== Instalare Chrony ====
PATH
Instalam Chrony pe client pentru a putea sincroniza timpul cu serverul NTP din LAN.


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;# apt install chrony
-->&#32;# <span style="color:#f00">'''ll /dev/vg_wiki/lv_wiki_1'''</span>
&#32;lrwxrwxrwx 1 root root 7 Apr 14 15:56 /dev/vg_wiki/lv_wiki_1 -> ../dm-1
&#32;# <span style="color:#f00">'''ll /dev/vg_wiki/lv_wiki_2'''</span>
&#32;lrwxrwxrwx 1 root root 7 Apr 14 15:56 /dev/vg_wiki/lv_wiki_2 -> ../dm-2
</code>
</code>


==== Verificare stare initiala ====
MAPPER
Inainte de modificari, clientul foloseste pool‑urile Ubuntu.


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;# chronyc sources
-->&#32;# <span style="color:#f00">'''ll /dev/mapper/vg_wiki-lv_wiki_1'''</span>
&#32;
&#32;lrwxrwxrwx 1 root root 7 Apr 14 15:56 /dev/mapper/vg_wiki-lv_wiki_1 -> ../dm-1
&#32;to be added
&#32;# <span style="color:#f00">'''ll /dev/mapper/vg_wiki-lv_wiki_2'''</span>
&#32;
&#32;lrwxrwxrwx 1 root root 7 Apr 14 15:56 /dev/mapper/vg_wiki-lv_wiki_2 -> ../dm-2
&#32;# chronyc tracking
&#32;
&#32;to be added
</code>
</code>


==== Editare configuratie Chrony ====
DISK ID
Pentru ca acest client sa foloseasca serverul nostru NTP din LAN, trebuie sa inlocuim pool‑urile implicite Ubuntu cu adresa serverului local. Configuratia este simpla: comentam sursa initiala si adaugam serverul nostru stratum 1.


Facem o noua listare pentru a fi siguri ca partitia a fost adaugata:
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;<b># nano /etc/chrony/chrony.conf</b>
-->&#32;# <span style="color:#f00">'''blkid /dev/mapper/vg_wiki-lv_wiki_1'''</span>
&#32;
&#32;/dev/mapper/vg_wiki-lv_wiki_1: UUID="da82776f-41ba-453d-a7c6-4e6ca5b48164" BLOCK_SIZE="4096" TYPE="ext4"
&#32;#pool ntp.ubuntu.com iburst
&#32;# <span style="color:#f00">'''blkid /dev/mapper/vg_wiki-lv_wiki_2'''</span>
&#32;#pool ntp.ubuntu.com iburst
&#32;/dev/mapper/vg_wiki-lv_wiki_2: UUID="129fbbee-e190-4a49-aa8f-ebdffb56c7bb" BLOCK_SIZE="4096" TYPE="ext4"
&#32;#pool ntp.ubuntu.com iburst
&#32;#pool ntp.ubuntu.com iburst
&#32;
&#32;server 192.168.1.23 iburst
</code>
</code>


Restartam chrony pentru aplicarea noilor configuratii
==== Montare partitii ====
* service chrony restart
 
==== Urmarirea sincronizarii ====
Dupa restart, clientul nu se sincronizeaza instant; are nevoie de cateva interogari pentru a valida sursa si a stabili offset‑ul. Folosim <b>watch</b> pentru a vedea in timp real cum trece de la starea initiala, nesincronizata, la sincronizarea completa cu serverul nostru.


In acest stadiu putem deja monta petitiile in systemul de operare folosind comenzile:
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;<b># watch -n1 "chronyc sources; echo; chronyc tracking"</b>
-->&#32;# mount /dev/mapper/vg_wiki-lv_wiki_1 /wiki/lv1
&#32;
&#32;# mount /dev/mapper/vg_wiki-lv_wiki_2 /wiki/lv2
&#32;to be added
&#32;to be added
&#32;to be added
&#32;to be added
&#32;to be added
&#32;to be added
</code>
</code>


În aceasta faza, clientul vede serverul, dar inca nu il foloseste ca sursa activa.
Pentru ca montarea sa se executa automat in cazul unui restart vom edita fisierul fstab:
Asteptam in acest ecran pana cand apare sincronizarea completa — se vede clar momentul in care clientul „prinde” serverul nostru.


<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;<b># watch -n1 "chronyc sources; echo; chronyc tracking"</b>
-->nano /etc/fstab
&#32;
&#32;to be added
&#32;to be added
&#32;to be added
&#32;to be added
&#32;to be added
&#32;to be added
</code>
</code>


Acum <b>chronyc sources</b> arata serverul stratum 1 ca sursa selectata, iar <b>chronyc tracking</b> confirma ca acest client a devenit stratum 2.
Aici vom adauga mount-pointurile in functie de modul in care se doreste:


== Concluzii ==
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
Pentru aceasta constructie am folosit un Raspberry Pi 1 deoarece ofera un consum de energie extrem de redus, zgomot electric minim si un mediu stabil, cu un singur nucleu. Aceste caracteristici il fac surprinzator de potrivit pentru sarcini de sincronizare a timpului, chiar daca modelele mai noi de Raspberry Pi ofera mai multa putere de procesare.
-->### mapare dupa path
/dev/vg_wiki/lv_wiki_1 /wiki/lv1 ext4 defaults 0 1
/dev/vg_wiki/lv_wiki_2 /wiki/lv2 ext4 defaults 0 1
</code>


Configuratia poate fi imbunatatita prin utilizarea unui Raspberry Pi echipat cu un HAT pentru SSD. Înlocuirea cardului micro‑SD elimina degradarea mediului de stocare si asigura o performanta mai constanta pe termen lung.
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->### mapare conform mapper
/dev/mapper/vg_wiki-lv_wiki_1 /wiki/lv1 ext4 defaults 0 1
/dev/mapper/vg_wiki-lv_wiki_2 /wiki/lv2 ext4 defaults 0 1
</code>


Precizia poate fi imbunatatita si prin trecerea de la modulul NEO‑7M la un receptor dedicat pentru aplicatii de timing. Modulele din seria T sunt proiectate special pentru sincronizare si ofera un semnal PPS mai curat si mai stabil.
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->### mapare dupa id-ul disk-ului
UUID=da82776f-41ba-453d-a7c6-4e6ca5b48164 /wiki/lv1 ext4 defaults 0 1
UUID=129fbbee-e190-4a49-aa8f-ebdffb56c7bb /wiki/lv2 ext4 defaults 0 1
</code>


Merita mentionat si faptul ca unele echipamente comerciale NTP sunt construite chiar pe hardware Raspberry Pi. Acest lucru face comparatia noastra si mai relevanta, deoarece platforma de baza este similara, iar diferentele de performanta provin in principal din alegerea componentelor si optimizarea firmware‑ului, nu din arhitecturi fundamental diferite.
Daca nu am montat deja partitiile manual vom face montarea partitiilor folosind comanda:


În comparatia cu echipamentele comerciale NTP, rezultatele au fost foarte apropiate. Unitatile dedicate au mentinut un jitter in jur de 0,2 milisecunde, in timp ce sistemul nostru a avut o medie intre 0,4 si 0,6 milisecunde — valori care se incadreaza confortabil in limitele acceptabile pentru sincronizare.
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
--># mount -a
</code>


Și rezultatele privind capacitatea de procesare au fost similare. Echipamentele comerciale au gestionat aproximativ 20 pâna la 30 de mii de cereri NTP pe minut, in timp ce sistemul nostru a sustinut intre 15 si 18 mii, demonstrând ca o solutie cu cost redus poate atinge performante apropiate de cele ale unui appliance dedicat.
La final vom avea o structura de disk-uri asemanatoare cu:


Per ansamblu, acest proiect arata ca, prin alegeri hardware bine gândite si o configurare corecta, un sistem compact si accesibil poate oferi o acuratete a timpului foarte apropiata de cea a echipamentelor NTP profesionale.
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
 
--># df -h
Combinatia dintre Chrony si PPS bazat pe GNSS ofera o sursa de timp stabila si predictibila, potrivita pentru o gama larga de aplicatii.
Filesystem                        Size  Used Avail Use% Mounted on
Cu imbunatatiri incrementale, aceasta platforma poate fi rafinata si mai mult si adaptata unor medii de sincronizare mai pretentioase.
.....
/dev/mapper/ubuntu--vg-ubuntu--lv  18G  5.7G  12G  34% /
/dev/mapper/vg_wiki-lv_wiki_1      5.9G  24K  5.6G  1% /wiki/lv1
/dev/mapper/vg_wiki-lv_wiki_2      3.9G  24K  3.7G  1% /wiki/lv2
.....
</code>

Latest revision as of 06:36, 9 March 2026

Adaugare disk live in Ubuntu 2X.04 LTS[edit | edit source]

Cu serverul pornit verificam care sunt disk-urile atasate si ce partitii sunt prezente:

# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS ...... sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 1.8G 0 part /boot └─sda3 8:3 0 18.2G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 18.2G 0 lvm / ......

Adaugare HDD[edit | edit source]

Procedam la introducerea noului disk virtual in hypervisor (ex Proxmox VM):

Fara a restarta masina virtuala si fara a fi nevoie de rescanarea interfetelor scsi, noul disk apare in OS:

# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS ...... sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 1.8G 0 part /boot └─sda3 8:3 0 18.2G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 18.2G 0 lvm / sdb 8:16 0 10G 0 disk ......

Partitionare si Formatare cu fisk[edit | edit source]

Pentru partitionarea si formatarea sdb vom folosi in ceea ce urmeaza utilitarul fDisk. Comenzile introduse for fi marcate in bold:

Atentie !!!
Pentru partitioanarea si formatarea disk-urilor mai mari de 2TB se va folosii utilitarul Parted

# fdisk /dev/sdb Welcome to fdisk (util-linux 2.37.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x94288925. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-20971519, default 2048): <--ENTER Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-20971519, default 20971519): <--ENTER Created a new partition 1 of type 'Linux' and of size 10 GiB. Command (m for help): t Selected partition 1 Hex code or alias (type L to list all): 8e Changed type of partition 'Linux' to 'Linux LVM'. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.

Partitionare si Formatare cu parted[edit | edit source]

to be added

Adaugare disk la nivel de OS[edit | edit source]

Dupa partitionarea la nivel de disk, creem partitia la nivel de OS:

# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created.

Facem o noua listare pentru a fi siguri ca partitia a fost adaugata:

# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS ...... sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 1.8G 0 part /boot └─sda3 8:3 0 18.2G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 18.2G 0 lvm / sdb 8:16 0 10G 0 disk └─sdb1 8:17 0 10G 0 part ......

Creare volume group si logical volume[edit | edit source]

In continuare vom adauga pe noul disk un grup vg_wiki si doua volume logice lv_wiki_1 respectiv lv_wiki_2. Din cauza hearede-lor ce se scriu pe disk, partitia finala nu va fi de exact 10GB, motiv pentru care vom creea un LV de 6GB iar celui de al doi-lea LV ii vom aloca spatiul ramas <4GB:

Creeare VG[edit | edit source]

# vgcreate vg_wiki /dev/sdb1 Volume group "vg_wiki" successfully created

Afisarea info grupului vg_wiki:

# vgdisplay vg_wiki --- Volume group --- VG Name vg_wiki System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size <10.00 GiB PE Size 4.00 MiB Total PE 2559 Alloc PE / Size 0 / 0 Free PE / Size 2559 / <10.00 GiB VG UUID PHAdU8-r8h2-vG36-gGMU-1ydU-nfgc-CREym8

Creeare LV[edit | edit source]

In interiorul grupului mai sus creeat vom ceea doua volume logice numite lv_wiki_1 si lv_wiki_2 lv_wiki_1 va avea o dimensiune de 6GB si va fi inclus in vg_wiki:

# lvcreate -n lv_wiki_1 -L 6G vg_wiki Logical volume "lv_wiki_1" created.

Vom afisa informatiile noului volum:

# lvdisplay vg_wiki/lv_wiki_1 --- Logical volume --- LV Path /dev/vg_wiki/lv_wiki_1 LV Name lv_wiki_1 VG Name vg_wiki LV UUID 734OGs-T40C-Swmg-p7Tb-uc7M-LeYA-mBa6iB LV Write Access read/write LV Creation host, time docker, 2023-04-14 15:40:48 +0000 LV Status available # open 0 LV Size 6.00 GiB Current LE 1536 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1

Din cauza inexactitatilor prezentate anterior, cel de-al doi-lea volum va avea aprox. 4GB si va fi inclus in vg_wiki. Din header-elor de disk ii vom aloca lui lv_wiki_2 spatiul ramas disponibil dupa ceerea lui lv_wiki_1:

# lvcreate -l 100%FREE -n lv_wiki_2 vg_wiki Logical volume "lv_wiki_2" created.

Vom afisa informatiile noului volum:

Facem o noua listare pentru a fi siguri ca partitia a fost adaugata:

# lvdisplay vg_wiki/lv_wiki_2 --- Logical volume --- LV Path /dev/vg_wiki/lv_wiki_2 LV Name lv_wiki_2 VG Name vg_wiki LV UUID BpjFe1-4tcQ-u3f7-nDfd-yVrv-zYFc-8I8CRy LV Write Access read/write LV Creation host, time docker, 2023-04-14 15:42:59 +0000 LV Status available # open 0 LV Size <4.00 GiB Current LE 1023 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2

Scriere File System[edit | edit source]

Pe fiecare dintre cele doua LV-uri create vom marca filesystem-ul, in cazul de fata vom folosi ext4 Pentru creearea lul lv_wiki_1 vom executa:

# mkfs -t ext4 -v /dev/vg_wiki/lv_wiki_1 mke2fs 1.46.5 (30-Dec-2021) fs_types for mke2fs.conf resolution: 'ext4' 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 393216 inodes, 1572864 blocks 78643 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1610612736 48 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Filesystem UUID: da82776f-41ba-453d-a7c6-4e6ca5b48164 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done

Iar pentru creearea lui lv_wiki_2 executam:

# mkfs -t ext4 -v /dev/vg_wiki/lv_wiki_2 mke2fs 1.46.5 (30-Dec-2021) fs_types for mke2fs.conf resolution: 'ext4' 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 262144 inodes, 1047552 blocks 52377 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1073741824 32 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Filesystem UUID: 129fbbee-e190-4a49-aa8f-ebdffb56c7bb Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done

La final verificam corectitudinea disk-urilor:

# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS ..... sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 1.8G 0 part /boot └─sda3 8:3 0 18.2G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 18.2G 0 lvm / sdb 8:16 0 10G 0 disk └─sdb1 8:17 0 10G 0 part ├─vg_wiki-lv_wiki_1 253:1 0 6G 0 lvm └─vg_wiki-lv_wiki_2 253:2 0 4G 0 lvm .....

Montarea diskurilor la nivel de system de operare[edit | edit source]

Pentru inserarea disk-urilor in systemul de operare vom creea doua directoare si vom edita fstab astfel incat cele doua discuri sa fie montate automat de catre OS in cazul lnui restart

Creeare directoare[edit | edit source]

Discurile vor fi adaugate in directorul /wiki, subdirectoarele lv1 respectiv lv2:

# mkdir /wiki # mkdir /wiki/lv1 # mkdir /wiki/lv2

Structura rezultata fiind urmatoarea:

# tree /wiki/ /wiki/ ├── lv1 └── lv2 2 directories, 0 files

Colectare informatii despre partitii[edit | edit source]

In fisierul de boot fstab, partiile pot fi montate in funtie de:

PATH

# ll /dev/vg_wiki/lv_wiki_1 lrwxrwxrwx 1 root root 7 Apr 14 15:56 /dev/vg_wiki/lv_wiki_1 -> ../dm-1 # ll /dev/vg_wiki/lv_wiki_2 lrwxrwxrwx 1 root root 7 Apr 14 15:56 /dev/vg_wiki/lv_wiki_2 -> ../dm-2

MAPPER

# ll /dev/mapper/vg_wiki-lv_wiki_1 lrwxrwxrwx 1 root root 7 Apr 14 15:56 /dev/mapper/vg_wiki-lv_wiki_1 -> ../dm-1 # ll /dev/mapper/vg_wiki-lv_wiki_2 lrwxrwxrwx 1 root root 7 Apr 14 15:56 /dev/mapper/vg_wiki-lv_wiki_2 -> ../dm-2

DISK ID

Facem o noua listare pentru a fi siguri ca partitia a fost adaugata: # blkid /dev/mapper/vg_wiki-lv_wiki_1 /dev/mapper/vg_wiki-lv_wiki_1: UUID="da82776f-41ba-453d-a7c6-4e6ca5b48164" BLOCK_SIZE="4096" TYPE="ext4" # blkid /dev/mapper/vg_wiki-lv_wiki_2 /dev/mapper/vg_wiki-lv_wiki_2: UUID="129fbbee-e190-4a49-aa8f-ebdffb56c7bb" BLOCK_SIZE="4096" TYPE="ext4"

Montare partitii[edit | edit source]

In acest stadiu putem deja monta petitiile in systemul de operare folosind comenzile: # mount /dev/mapper/vg_wiki-lv_wiki_1 /wiki/lv1 # mount /dev/mapper/vg_wiki-lv_wiki_2 /wiki/lv2

Pentru ca montarea sa se executa automat in cazul unui restart vom edita fisierul fstab:

nano /etc/fstab

Aici vom adauga mount-pointurile in functie de modul in care se doreste:

### mapare dupa path /dev/vg_wiki/lv_wiki_1 /wiki/lv1 ext4 defaults 0 1 /dev/vg_wiki/lv_wiki_2 /wiki/lv2 ext4 defaults 0 1

### mapare conform mapper /dev/mapper/vg_wiki-lv_wiki_1 /wiki/lv1 ext4 defaults 0 1 /dev/mapper/vg_wiki-lv_wiki_2 /wiki/lv2 ext4 defaults 0 1

### mapare dupa id-ul disk-ului UUID=da82776f-41ba-453d-a7c6-4e6ca5b48164 /wiki/lv1 ext4 defaults 0 1 UUID=129fbbee-e190-4a49-aa8f-ebdffb56c7bb /wiki/lv2 ext4 defaults 0 1

Daca nu am montat deja partitiile manual vom face montarea partitiilor folosind comanda:

# mount -a

La final vom avea o structura de disk-uri asemanatoare cu:

# df -h Filesystem Size Used Avail Use% Mounted on ..... /dev/mapper/ubuntu--vg-ubuntu--lv 18G 5.7G 12G 34% / /dev/mapper/vg_wiki-lv_wiki_1 5.9G 24K 5.6G 1% /wiki/lv1 /dev/mapper/vg_wiki-lv_wiki_2 3.9G 24K 3.7G 1% /wiki/lv2 .....