Showing posts with label backup. Show all posts
Showing posts with label backup. Show all posts

September 30, 2017

Fixing rsync error: error in rsync protocol data stream

I use rsync (wrapped in a script) to back up the data to a Western Digital MyCloud device from my Fedora system. At times I have seen rsync errors "rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.2]" during backup.


As the error was appearing sporadically, it was not a configuration or setup issue. Finally I tried passing protocol parameter to rsync and it worked. The rsync in my Fedora system uses protocol 31 by default and the one in WD device supports 30 by default. Setting --protocol=30 didn't help but setting protocol to 26 resolved the problem. I've been running rsync using protocol 26 for few weeks and haven't seen the errors.



April 10, 2013

rsync ഉപയോഗിച്ചുള്ള ഡാറ്റാ ബാക്കപ്

നിങ്ങളുടെ ഡാറ്റയുടെ ബാക്കപ് എടുക്കണമെന്ന് ആഗ്രഹമുണ്ടോ? നിങ്ങൾ പതിവായി ഡാറ്റാ ബാക്കപ് ചെയ്യാറുണ്ടോ? എപ്പോഴെങ്കിലും കമ്പ്യൂട്ടറിന്റെയോ, ഡിസ്കിന്റെയോ തകരാർ കാരണം വിലപിടിച്ച ഡാറ്റാ നഷ്ടപെട്ടിട്ടുണ്ടോ? ഈ ചോദ്യങ്ങളിൽ ഒന്നിനെങ്കിലും അതെ എന്നാണ് നിങ്ങളുടെ ഉത്തരമെങ്കിൽ തുടർന്നു വായിക്കുക. എക്സ്റ്റേണൽ ഡ്രൈവൊക്കെ വാങ്ങി ബാക്കപ്പെടുക്കുന്നതൊക്കെ ചെലവുള്ള പണിയാണെന്നു വിചാരിക്കുന്നവരോട് ഒരു ചോദ്യം കൂടി - നിങ്ങളുടെ ഡാറ്റയാണോ എക്സ്റ്റേണൽ ഡ്രൈവാണോ കൂടുതൽ വിലപിടിച്ചത്?

ഡയറക്ടറികളും ഫയലുകളും മറ്റൊരു സ്ഥലത്തേക്ക് synchronize ചെയ്യുന്ന ഒരു പ്രോഗ്രാമാണ് rsync. മറ്റൊരു സ്ഥലമെന്നത് ഒരേ സിസ്റ്റത്തിലെ വ്യത്യസ്ത ഡയറക്ടറികളോ, രണ്ടു സിസ്റ്റങ്ങളിലെ ഡയറക്ടറികളോ തമ്മിലാകാം. rsync ഉപയോഗിച്ച്, സിസ്റ്റത്തിൽ ചേർത്തിട്ടുള്ള എക്സ്റ്റേണൽ ഡ്രൈവിലേക്ക് ഡാറ്റാ ബാക്കപ്പെടുക്കുന്നത് എങ്ങനെ എന്നാണ് ഈ പോസ്റ്റിൽ വിശദീകരിക്കുന്നത്.

/home/prime/data  എന്ന ഡയറക്ടറിയും അതിലെ ഉള്ളടക്കവും  /externaldrive/backup എന്ന ഡയറക്ടറിയിലേക്ക് ബാക്കപ്പെടുക്കുന്നത് എങ്ങനെ എന്നു നോക്കാം.

rsync -a /home/prime/data  /externaldrive/backup എന്ന കമാന്റ് റൺ ചെയ്താൽ ഡാറ്റ മുഴുവൻ /externaldrive/backup എന്ന ഡയറക്ടറിയിൽ എത്തിയിട്ടുണ്ടാകും. കുഴപ്പമൊന്നുമില്ലെങ്കിൽ ഈ കമാന്റ് നിശബ്ദമായി ഫയലുകൾ ലക്ഷ്യസ്ഥാനത്തേക്ക് പകർത്തും.  -a എന്നത് ആർക്കൈവ് മോഡിൽ ഡേറ്റാ പകർത്തുന്നതിനാണ്.  വളരെയധികം ഫയലുകൾ പകർത്തുമ്പോൾ rsync കുറച്ചധികം സമയമെടുത്തേക്കും. അപ്പോൾ rsync എന്താണ് ചെയ്യുന്നതെന്നറിയാൻ -v എന്ന കമാന്റ് ലൈൻ പരാമീറ്റർ കൊടുത്താൽ മതിയാകും.

rsync -av /home/prime/data  /externaldrive/backup  ഇപ്പോൾ ഫയലുകൾ പകർത്തുന്ന മുറയ്ക്ക് അവയെകുറിച്ചുള്ള വിവരങ്ങൾ rsync ടെമിനലിലേക്ക് എഴുതും.
rsync -av /home/prime/data  /externaldrive/backup > backup.log 2>&1 എന്നാക്കിയാൽ മെസ്സേജുകൾ backup.log എന്ന ഫയലിലേക്ക് എഴുതും.

rsync ആദ്യം ഒരു ഡയറക്ടറിയുടെ ബാക്കപ്പെടുക്കുമ്പോൾ കുറച്ചധികം സമയമെടുക്കും. പിന്നീടുള്ള ബാക്കപ്പുകളിൽ പുതിയ ഫയലുകളും മാറ്റമുള്ള ഫയലുകളും മാത്രം പകർത്തുമെന്നതിനാൽ കൂടുതൽ വേഗത്തിൽ ബാക്കപ് നടക്കും. പുതിയ ഫയലുകളും മാറ്റമുള്ള ഫയലുകളും  rsync തന്നെ കണ്ടുപിടിക്കുമെന്നതിനാൽ യൂസറിന് അതിനെക്കുറിച്ചാലോചിച്ച് ബുദ്ധിമുട്ടേണ്ടതില്ല. ഈ തരത്തിൽ ബാക്കപ്പെടുക്കുമ്പോൾ മാറിയ ഫയലുകൾ ലക്ഷ്യസ്ഥാനത്തുള്ള ഫയലുകളെ മാറ്റുമെന്നതിനാൽ മാറ്റങ്ങളും  പകർത്തപ്പെടും. ഉദാഹരണത്തിന് ബിരിയാണി എന്ന ഫയലിൽ പത്ത് വരികൾ ഉണ്ടായിരുന്നെന്നു കരുതുക. ആദ്യത്തെ ബാക്കപ്പിനു ശേഷം അബദ്ധവശാൽ അതിലെ നാലു വരികൾ മായ്കക്കപ്പെട്ടു എന്നു കരുതുക. അടുത്ത പ്രാവശ്യം rsync ചെയ്യുമ്പോൾ ലക്ഷ്യസ്ഥാനത്തിലെ പത്തു വരിയുള്ള ബിരിയാണി ആറു വരികളുള്ള ബിരിയാണിയായി മാറും. --backup, --backup-dir --suffix എന്നീ ഓപ്ഷനുകളുപയോഗിച്ച് താഴെ പറയുന്ന രീതിയിൽ ഈ പ്രശ്നം ഒരു പരിധിവരെ പരിഹരിക്കാവുന്നതാണ്.

rsync -av --backup --backup-dir=/externaldrive/changes --suffix=.bkup /home/prime/data  /externaldrive/backup

ഇപ്പോൾ മാറ്റമുള്ള ഫയലുകളുടെ പഴയ കോപ്പികൾ /externaldrive/changes എന്ന ഡയറക്ടറിയിൽ .bkup എന്ന എക്സ്റ്റൻഷനോടെ  ഉണ്ടാകും. changes ഡയറക്ടറിയുടെ ഘടന /home/prime/data എന്ന ഡയറക്ടറിയുടേതു പോലെ ആയിരിക്കും. നേരത്തേ പറഞ്ഞ നമ്മുടെ ബിരിയാണി ഫയൽ /home/prime/data/recipe/biriyani എന്നാണെങ്കിൽ ആറുവരിയുള്ള പുതിയ ബിരിയാണി ഫയൽ  /externaldrive/backup/data/recipe/biriyani ആയും  /externaldrive/backup/data/recipe/biriyani ഇൽ നേരത്തേ ഉണ്ടായിരുന്ന പത്തു വരി ബിരിയാണി  /externaldrive/changes/data/recipe/biriyani.bkup എന്ന പേരിലും ഉണ്ടാകും. ഓരോ തവണയും suffix .bkup എന്നായതിനാൽ /externaldrive/changes ഡയറക്ടറിയിൽ തൊട്ടുമുമ്പത്തെ വെർഷൻ മാത്രമേ ഉണ്ടാകൂ. .bkup എന്നതിനു പകരം ഡേറ്റും സമയവും   --suffix ആയി ഉപയോഗിച്ചാൽ എല്ലാ വെർഷനും കിട്ടും.

rsync -av --backup --backup-dir=/externaldrive/changes --suffix= .bkup.`date "+%Y%m%d%H%M%S"` /home/prime/data  /externaldrive/backup

ഇപ്പോൾ ബാക്കപ്പുകൾക്ക് .bkup.YYYYMMDDHHMISS എന്ന രീതിയിൽ എക്സ്റ്റൻഷനുണ്ടാകും.

വെവ്വേറെ ഡയറക്ടറികളുടെ ബാക്കപ്പെടുക്കാൻ ഡയറക്ടറികളുടെ പേരു മാറ്റി rsync റൺ ചെയ്താൽ മതിയാകും. ഇനി ഇതെല്ലാം കൂടി ഒരു ഫയലിലാക്കി കിട്ടിയാൽ കൊള്ളാമെന്നുണ്ടെങ്കിൽ ചെറിയ വ്യത്യാസങ്ങളോടു കൂടി backupScript.sh എന്ന പേരിൽ സംഭവം ഇവിടെ (http://goo.gl/rUdqe) ഉണ്ട്[1].  പല ഡയറക്ടറികൾ സപ്പോർട്ട് ചെയ്യാനായി വിവരങ്ങൾ ഒരു പ്രൊഫൈൽ ഫയലിൽ നിന്ന് റീഡ് ചെയ്യുന്നു. പല ഡിസ്കുകൾക്കായി വെവ്വേറെ പ്രൊഫൈൽ ഫയലുകൾ ഉണ്ടാക്കാവുന്നതാണ്. ഒരു സാമ്പിൾ ഫയൽ extDrive.profile എന്ന പേരിൽ ഇവിടെയുണ്ട് : http://goo.gl/zewX7

സ്ക്രിപ്റ്റ് റൺ ചെയ്യുന്ന വിധം.
1. സ്ക്രിപ്റ്റും സാമ്പിൾ പ്രൊഫൈലും ഡൗൺലോഡ് ചെയ്യുക.
2. chmod u+x backupScript.sh എന്നു കമാന്റ് റൺ ചെയ്യുക. സ്ക്രിപ്റ്റ് ഫയലിന്  എക്സിക്യൂട്ട് പെർമിഷൻ കൊടുക്കാനാണിത്.
3. ഏതെങ്കിലും ടെക്സ്റ്റ് എഡിറ്റർ ഉപയോഗിച്ച് സാമ്പിൾ പ്രൊഫൈലിൽ (extDrive.profile) ആവശ്യം വേണ്ട മാറ്റം വരുത്തുക.
    അ. CTRL|backupdir|/externaldrive/changes എന്ന ലൈനിലെ /externaldrive/changes എന്ന പഴയ വെർഷനുകൾ സൂക്ഷിക്കുന്ന ഡയറക്ടറിയുടെ പേര് നിങ്ങളുടെ ആവശ്യാനുസരണം മാറ്റുക.
    ആ. /home/user/data|/externaldrive/bkup എന്ന ലൈനിൽ ആദ്യത്തെ ഡയറക്ടറി ബാക്കപ്പെടുക്കേണ്ട ഡയറക്ടറിയാണ്. രണ്ടാമത്തേത് ലക്ഷ്യസ്ഥാനവും. ഇതു രണ്ടും തമ്മിൽ വേർതിരിക്കുന്നത് പൈപ്പ് (|) ഉപയോഗിച്ചാണ്. പൈപ്പ് ഇല്ലെങ്കിൽ സ്ക്രിപ്റ്റ് ശരിയായി പ്രവർത്തിക്കില്ല.
    ഇ. കൂടുതൽ ഡയറക്ടറികൾ ബാക്കപ്പെടുക്കണമെങ്കിൽ കൂടുതൽ ലൈനുകൾ ചേർക്കാവുന്നതാണ്.
    ഈ. ലൈനുകൾ കമന്റു ചെയ്യാൻ ലൈനിന്റെ ആദ്യം # ചേർത്താൽ മതി.
4. backupScript.sh extDrive.profile എന്നു ടെർമിനലിൽ റൺ ചെയ്യുക.

[1] rsyncഉം  ഈ സ്ക്രിപ്റ്റിന്റെ മുൻഗാമികളും  കാരണമാണ് രണ്ടു പ്രാവശ്യം ലാപ്ടോപ് അടിച്ചു പോയിട്ടും, പല പ്രാവശ്യം എക്സ്റ്റേണൽ/ഇന്റെണൽ ഡ്രൈവുകൾ കുളമാ(ക്കി)യിട്ടും എന്റെ ഡാറ്റ സുരക്ഷിതമായിരിക്കുന്നതെന്ന് നന്ദിപൂർവം സ്മരിച്ചുകൊള്ളുന്നു.