Tandberg RDX è un sistema di backup basato su cassette rimovibili, contenente un SSD e HDD da 2.5 pollici atto ad eseguire il backup offline in modo semplice e pulito.
Il vantaggio di questo sistema di backup è la presenza di questi supporti di dimensioni accettabili per poter eseguire il backup offline rimovibile, a un costo accettabile rispetto alle soluzione con i nastri, mantenendo anche una buona performance di copia basandosi su tecnologie tradizionali.
Attualmente HDD arriva fino a 5TB, mentre SSD addirittura a 8TB.
Introduzione iniziale
La soluzione è composta da questi supporti rimovibili (cassette) e da un lettore RDX, che può essere usb 3 (quickstore) o una libreria di rete contenente fino a 8 supporti contemporaneamente (quickstation) di fascia enterprise.
La rimozione delle cassette è possibile tramite pulsante di espulsione (come un normale lettore CD), oppure tramite funzione di espulsione direttamente dal sistema operativo.
Con la libreria di rete (Quickstation) possiamo collegarci unicamente tramite iScsi mentre la Quickstore solo con il cavo USB.
Per quanto riguarda questo collegamento ci sono 2 modalità, la modalità removible e fixed.
La modalità removibile è vista, nello specifico nei dispositivi Windows, come “disco rimovibile” per cui nativamente è consentito l’espulsione in qualunque momento in tutta sicurezza.
La modalità fixed, invece, viene vista come un unità fissa e se montata non è possibile nessuna attività di espulsione della cassetta.
Un altro aspetto, soprattutto utile per la scelta dei supporti sono le performance. Questi dati sono quelli presi in un documento pubblico trovato in rete.
Arriviamo al punto…
Perché facciamo queste distinzioni? Ora avendo descritto il quadro complessivo della soluzione, ci imbattiamo in un problema che ho rilevato nelle 2 modalità che influenzando sia RPO che RTO in fase di backup e la gestione di questi supporti con il software di backup.
Sappiamo tutti che la velocità è molto impattante sui processi di backup, perché permette di avere tempi di backup e ripristino molto diversi a seconda della velocità del supporto.
Come possiamo vedere sopra SSD ha una velocità dichiarata di circa 280 MB/s mentre HDD siamo suoi 100 MB/s.
Queste velocità sarebbero anche in linea con la natura dei supporti, però senza considerare un aspetto: la modalità di collegamento che avevamo descritto prima.
Ebbene queste velocità sono riferite alla tipologia fixed mode, in removibile mode invece c’è un po’ di differenza. Però in fixed mode la gestione dei supporti rimovibili non è nativamente prevista se il supporto.
Dai test eseguiti, le velocità in removible mode e fixed mode sono molto diverse.
Performance HDD (connettività 1GB/ps)
Modalità Removible
Modalità Fixed
Performance SSD (connettività 1GB/ps)
Modalità Removible
Modalità Fixed
Abbiamo eseguito anche dei test degli SSD con connettività 10Gbps, che con SSD migliorano anche in removible mode ma sono ancora molto inferiori alle attese.
Performance SSD (connettività 10GB/ps)
Modalità Removible
Modalità Fixed
Il problema non è del sistema RDX che funziona egregiamente ma è la modalità che il sistema operativo gestisce i dischi in removibile mode.
Analizzando meglio il problema sembra che in removible mode non venga usata la scrittura asincrona e la cache di scrittura (probabilmente per affidabilità della copia nel caso venga rimossa la cassetta senza preavviso) e quindi c’è un forte deterioramento delle performance rendendo anche inutili la scelta di un SSD e deludenti gli HDD rispetto alle aspettative.
Ora questa differenza di velocità è molto impattante, in quanto aumenta piu di 2 volte la velocità dei backup e dei ripristini.
La modalità fixed invece permette di avere velocità coerenti con le specifiche fornite dal produttore però abbiamo un problema, il fatto che se le unità sono montate, si perde la possibilità di espellere la cassetta (neanche il bottone non espelle la cassettta) perdendo l’obiettivo della soluzione che doveva essere per definizione rimovibile.
La soluzione
Ora, come possiamo sfruttare a pieno RDX con Veeam (o un altro software di backup) pur mantenendo la rimozione facilmente applicabile?
E’ chiaro che l’unica modalità per conservare le performance è la fixed mode.
Nel provare a risolvere questo problema, anche con il supporto tecnico (molto disponibile tra l’altro), abbiamo fatto diversi test.
Abbiamo utilizzato RDX manager per espellere “forzatamente” la cassetta in fixed mode però si generava la corruzione dei dati (no bene per dei backup), sia utilizzando sistemi Linux (una sorta di broker su cui puntare) in cui sono presenti comandi nativi per poter espellere la cassetta, come ad esempio eject, ma risultati sono molto complicati da usare in una funzione automatizzata.
La soluzione, dopo un attenta analisi, che ho invece intrapreso è quella di creare un batch di montaggio e smontaggio utilizzando powershell, facendo eseguire i batch prima e dopo il backup.
Nel dettaglio gli script smontato/montato l’unità all’occorrenza ed espulso la cassetta, essendo che in fixed mode non possiamo eseguirlo da dentro il sistema, quindi tramite un workaround usando le API del portale di management, ci siamo collegati alla Quickstation.
Qui sotto gli esempi degli script:
Montaggio supporto
Il montaggio del supporto prevede il montaggio dell’iscsi, e in seguito l’assegnazione di una lettera statica. (ogni volta che si cambia cassetta in fixed mode, windows assegnerebbe un a lettera diversa bloccando il piano di backup)
cls
$target = '' #Desired target IQN
$partition = 1 #Desired partition
$drvLetter = '' #Desired drive letter
Connect-IscsiTarget -NodeAddress $target
Start-Sleep -Seconds 10
#get the disk device number from the iscsi session class (diskpart needs it)
$iscsiSsn = gwmi -namespace "root\wmi" -class MSiSCSIInitiator_SessionClass
$diskNum = ($($iscsiSsn | where { $_.targetname -eq $target}).devices).deviceNumber
#put online disk
$dskPrtScr = "$($env:temp)\diskpart.scr"
"sel disk $diskNum`n online disk" | out-file $dskPrtScr -encoding ascii
diskpart /s $dskPrtScr
Start-Sleep -Seconds 5
#assign letter to partition
$dskPrtScr = "$($env:temp)\diskpart.scr"
"sel disk $diskNum`nsel par 1`nassign letter=$drvLetter`nexit" | out-file $dskPrtScr -encoding ascii
diskpart /s $dskPrtScr
Smontaggio supporto
Lo smontaggio del supporto prevede la messa offline del disco (questo perché in alcuni casi lo smontaggio iscsi non riusciva), e in seguito lo smontaggio iscsi.
A questo punto la cassetta in fixed mode è rimovibile con il pulsante.
E’ stato introdotto anche la rimozione della cassetta a un determinato giorno della settimana e una segnalazione dell’evento via email, utile per assicurarsi che prima del weekend il backaup vada offline.
cls
# Quickstation parameters
$target = '' #Desired target IQN
$ip = '' #QuickStation IP
$user = '' #QuickStation Username
$pswd = ' #QuickStation Password
$rdxId = '' #ID of rdd to eject
$ejextDay = ''
# SMTP parameters
# Command for create encrypted password file in same script directory
# "myPassword" | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File "EmailPassword.txt"
$smtpEncryptedPassword = "[path to file]\EmailPassword.txt"
$smtpServer=""
$smtpUsername = ""
$smtpPassword = ""
$from = ""
$adminEmailAddr = "","" #multiple addr allowed but MUST be independent strings separated by comma
function Eject-catridge {
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
Write-Host "Eject RDX Tape"
$LoginParameters = @{
Uri = "http://$ip/php/vtx_user.php"
SessionVariable = 'Session'
Method = 'POST'
Body = @{
action = 'logon'
user = $user
pswd = $pswd
override = '1'
}
}
$LoginResponse = Invoke-WebRequest @LoginParameters -UseBasicParsing
$ActionResponse = Invoke-WebRequest "https://$ip/php/vtx_pdev.php?action=eject&id=rdx0$rdxId&tag=$rdxId" -WebSession $Session -UseBasicParsing
$ActionResponse = Invoke-WebRequest "https://$ip/php/vtx_user.php?action=logoff" -WebSession $Session -UseBasicParsing
}
function Unmount-Iscsi {
Start-Sleep -Seconds 10
$iscsiSsn = gwmi -namespace "root\wmi" -class MSiSCSIInitiator_SessionClass
$diskNum = ($($iscsiSsn | where { $_.targetname -eq $target}).devices).deviceNumber
#put offline disk
$dskPrtScr = "$($env:temp)\diskpart.scr"
"sel disk $diskNum`n offline disk" | out-file $dskPrtScr -encoding ascii
diskpart /s $dskPrtScr
Start-Sleep -Seconds 5
Write-Host "Disconnect IscsiTarget"
Disconnect-IscsiTarget -NodeAddress $target -Confirm:$false
}
function Send-Notification {
# using encripted password
#$smtpCreds = New-Object System.Management.Automation.PSCredential($smtpUsername, (Get-Content $smtpEncryptedPassword | ConvertTo-SecureString))
#using hard-code clear password
$secpasswd = ConvertTo-SecureString $smtpPassword -AsPlainText -Force
$smtpCreds = New-Object System.Management.Automation.PSCredential($smtpUsername, $secpasswd)
$textEncoding = [System.Text.Encoding]::UTF8
Send-Mailmessage -smtpServer $smtpServer -from $from -to $adminEmailAddr -subject "Remainder cambio cassetta alloggiamento $rdxId" -body $body -bodyasHTML -priority High -Encoding $textEncoding -ErrorAction Stop -ErrorVariable err -Credential $smtpCreds
}
Unmount-Iscsi
if( (get-date).DayOfWeek -eq $ejextDay){
Write-Host "Backup is completed and is $ejextDay, now i remove catridge in slot $rdxId!"
Eject-catridge
$body+="Remainder Change Backup Cassette<br> The cassette in slot $rdxId has just been removed and is ready to be archived."
Send-Notification
}