Fayllarni Yandex diskiga zaxiralash. Xatolarni qayta ishlash bilan Yandex.Disk-ga zaxiralash

Salom do'stlar!

Oxirgi marta blog yuritganimga atigi 4 yil bo'ldi. Bu vaqt ichida katta bilim va tajriba bazasi to'plandi. Ko'plab qiziqarli ishlar amalga oshirildi va ko'plab qiziqarli loyihalar amalga oshirildi. Men ulardan ba'zilari haqida (o'qing: "tijorat sirlarini buzmasdan") bir nechta postlarda gapirishga harakat qilaman.
Qaytishimga bir nechta narsa turtki bo'ldi. Birinchidan, ma'lum bo'lishicha, yozilganlarning ko'pi hali ham o'z ahamiyatini yo'qotmagan. Ikkinchidan, odamlar uni o'qishni yaxshi ko'rishlari ma'lum bo'ldi. Bu juda yoqimli edi :) Misol: uch oy oldin intervyuda ular mendan nega blogimni tashlab ketganimni so'rashdi va meni maqtashdi. Agar meni olib ketishsa, devor gazetasiga yozaman, deyishdi. Ular buni olishmadi, shuning uchun men devorlarga gazeta yozmayman :)

Ammo bularning barchasi qo'shiq matni, keling, biznesga kirishaylik.
Yandex.Disk-da zaxira nusxasini o'rnatish vazifasi paydo bo'ldi. Albatta, ko'plab skriptlar mavjud, lekin ko'pchilik faylni nusxa ko'chirish faktini tekshirmasdan, hisobotlar va boshqa narsalarsiz oddiy nusxalashni taklif qiladi. Oxir-oqibat, bitta yaxshi odam menga del laqabli ma'lum bir do'stimning blogiga havola yubordi, u qaror qildi. bu muammo. Uning taxallusini hisobga olib, men ssenariyni o'qib chiqdim, keyin uni sinab ko'rdim. Hammasi yaxshi ishlaydi, barcha fayllar joyida, hech narsa yon tomonga yuborilmaydi.
Men sizni ogohlantiramanki, skript aslida ma'lumotlarni arxivlamaydi. Bular. Siqish bor, lekin u minimal. Agar siz maʼlumotlarni toʻgʻri siqishingiz kerak boʻlsa, FreeBSD uchun “tar --help” yoki “man tar” dan foydalaning. Aytgancha, men FreeBSD-ni ularning odami uchun juda yaxshi ko'raman. Aniqrog'i, ularni o'qish deyarli doimiy ehtiyoj uchun. Har safar o'qiganingizda "taxminan... qotil paydo bo'ladi.." degan tuyg'u paydo bo'ladi, lekin yana umidsizlik. Qotil yo'q, hayotda ma'no yo'q.

Endi skriptning o'zi. Iltimos, diskingizning ildiz katalogida Ilovalar papkasi yaratilishini unutmang. U erda hamma narsani qidiring. Bundan tashqari, skript barcha sharhlarni rus tilida qoldiradi, shuning uchun ko'pchilik kodlash bilan bog'liq muammolarga duch kelishi mumkin. Odatdagidek, ikkita yechim bor. Yoki serverga kerakli narsani o'rnatamiz yoki hamma narsani transliteratsiyaga qayta yozamiz. Siz uni ingliz tiliga ham tarjima qilishingiz mumkin. Ikkinchisi eng yaxshisi, chunki... kim Necronomicon dan iqtiboslarni yoki qo'lda yozilgan shifokor retseptini o'qishni xohlaydi.
Shuni ham yodda tutingki, skriptning boshida standart mavjud #!/bin/bash

Esda tutingki, FreeBSD bash-ni qo'llab-quvvatlamaydi, shuning uchun siz ushbu qatorni bilan almashtirishingiz kerak #!/bin/sh, aks holda u boshlamaydi.

Loyihalarning (saytlarning) zaxira nusxalarini Yandex.Disk-ga bir nechta sabablarga ko'ra yuklashingiz kerak bo'lishi mumkin, masalan, serverda bo'sh joy yo'qligi (xosting, VDS, VPS) yoki zaxira nusxalarini saqlash xavfsizligini oshirish uchun (server ishlamay qolgan bo'lsa). reyd qilinmagan va u xizmatdan chiqib ketadi) bino).

Shu munosabat bilan men o'zim uchun yozdim va boshqalar uchun Yandex.Disk-da zaxiralash uchun kichik bash skriptini joylashtirishga qaror qildim. Skript funktsiyalari:
— Serverda loyihalarning (fayllar + ma'lumotlar bazalari) zaxira nusxasini yaratish MySQL ma'lumotlari);
— Ilova sifatida Yandex.Disk-da avtorizatsiya (token bo'yicha, boshqalar xavfsiz yo'l login va paroldan foydalanishdan ko'ra);
— Yandex.Diskga serverdan zahira nusxalarini yuborish;
— Joyni tejash uchun Yandex.Disk-dan eski zaxira nusxalarini o'chirish (sozlanishi mumkin maksimal miqdor saqlangan zaxira nusxalari);
— Jurnalni elektron pochta orqali yozib olish va yuborish (sozlanishi mumkin).

Skriptdan foydalanish uchun avval Yandex.Disk'dan token olishingiz kerak. Qani boshladik.

1. Biz diskida zaxira nusxasini yaratadigan hisob qaydnomasi ostida Yandex-ga kiring, oauth.yandex.ru saytiga o'ting va "Yangi dasturni ro'yxatdan o'tkazish" tugmasini bosing.

2. Ilova nomini to'ldiring (masalan, "zaxira") va chiqaring zarur huquqlar"Yandex.Disk REST API" bo'limida, ya'ni: "Disk haqidagi ma'lumotlarga kirish" va "Diskdagi dastur papkasiga kirish".

Xuddi shu sahifada, "Qayta qo'ng'iroq qilish URL" maydoni ostida, "ishlab chiqish uchun URL o'rniga" tugmasini bosing va "Saqlash" tugmasini bosing:

3. Ilova sozlamalarini saqlaganimizdan so'ng biz ilova ma'lumotlari joylashgan sahifaga yo'naltirilamiz:

4. Endi biz tokenning o'zini olamiz (agar xohlasangiz, bu haqda Yandex qo'llanmasida batafsil o'qishingiz mumkin), buning uchun identifikatorni nusxalaymiz, https://oauth.yandex.ru/authorize?response_type=token&client_id= ni kiritamiz. URL oxirida paydo bo'lgan manzilga o'ting va ilovaga ruxsatlar berilganligini tasdiqlang:

Natijada, sahifada kamida 1 yil davomida chiqarilgan token ko'rsatiladi, shuning uchun zaxira skripti to'satdan ishlamay qolsa, biz yangi tokenni olishimiz va uni skriptga almashtirishimiz mumkin. Qabul qilingan token yordamida Yandex.Disk bilan ishlash imkoniyatlarini maxsus test saytida sinab ko'rishingiz mumkin.

Va endi Yandex.Disk-ga zaxiralash uchun bash skriptining o'zi:


#!/bin/bash # # Yandex.Diskning zaxira nusxasi skripti v1.0 Sergey Lukonin tomonidan (neblog.info) # # # # # # # # # # # MYSQL SOZLAMALARI # # # # # # # # # # # Server DB MYSQL_SERVER=mysql.some-server.ru # Foydalanuvchi, uning ostida biz mavjud ma'lumotlar bazalarining zaxira nusxalarini yaratamiz, mysql root odatda barcha ma'lumotlar bazalariga kirish huquqiga ega, individual foydalanuvchi odatda ma'lum bir loyihaning ma'lumotlar bazasiga kirish huquqiga ega MYSQL_USER=ba'zi foydalanuvchi # Ma'lumotlar bazasi foydalanuvchi paroli (server ildizi paroli va MySQL ildizidan boshqasini aralashtirmang) MYSQL_PASSWORD=ba'zi parol # # # # # # # # # # UMUMIY SOZLAMALAR # # # # # # # # # # # Vaqtinchalik uchun katalog Yandex.Disk-ga yuborilgandan so'ng o'chirilgan zahira nusxalarini saqlash BACKUP_DIR="/home/www/backup" # Loyiha nomi, jurnallarda va arxiv nomlarida foydalaniladi PROJECT="neblog.info" # Yandex.Diskda saqlangan zaxira nusxalarining maksimal soni ( 0 - barcha zaxira nusxalarini saqlash): MAX_BACKUPS="14" # Arxiv nomlarida ishlatilgan sana DATE=`date "+%Y-%m-%d"` # Arxivlash uchun kataloglar (bo'sh joy bilan ko'rsatilgan), ular joylashtiriladi bitta arxivda saqlanadi va Yandex.Disk DIRS="/home/ www/projects/neblog" # Yandex.Disk tokeniga yuboriladi (uni qanday olish mumkin - neblog.info-ga qarang) TOKEN="" # Jurnal fayl nomi, diskda saqlanadi. $BACKUP_DIR LOGFILE="backup.log"da ko'rsatilgan katalog # skriptning bajarilishi natijasini yuborish uchun elektron pochta. Natijalarni yuborishni xohlamasangiz, bo'sh qoldiring. sendLog=" [elektron pochta himoyalangan] " # Faqat xatolarni jo'natish (to'g'ri). Agar skript bajarilishining har qanday natijasi uchun jurnallarni jo'natmoqchi bo'lsangiz, "false" ni belgilang. sendLogErrorsOnly="false" # # # # # # # # # # SOZLAMALAR OXIRI # # # # # # # # # # # # # # # # # # BOSHQA NARSANI O'ZGARTIRMAYIN ]; agar echo "$1" bo'lsa, "$2" mail -s "$1" | dev/null fi else echo "$2" | /dev/null fi fi ) funktsiya logger() ( echo "["`date "+%Y-%m-%d %H:%M:%S"`"] $BACKUP_DIR fayli: $1" >> $BACKUP_DIR /$LOGFILE ) funksiyasi parseJson() ( mahalliy chiqish regex="(\"$1\":[\"]?)([^\",\)]+)([ \"]?)" [[ $2 = ~ $regex ]] && output=$(BASH_REMATCH) echo $output ) funksiya checkError() ( echo $(parseJson "xato" "$1") ) funksiya getUploadUrl() ( json_out= `curl -s -H "Avtorizatsiya: OAuth $TOKEN" https://cloud-api.yandex.net:443/v1/disk/resources/upload/?path=app:/$backupName&overwrite=true` json_error=$( checkError "$json_out") agar [[ $ json_error != "" ]]; keyin logger "$PROJECT - Yandex.Disk xatosi: $json_error" pochta jo'natmasi "$PROJECT - Yandex.Disk zahirasi xatosi" "XATO $FILENAME faylini nusxalash. Yandex.Disk xatosi: $json_error" echo "" else output=$(parseJson " href" $json_out) echo $output fi ) funksiyasi uploadFile ( local json_out local uploadUrl local json_error uploadUrl=$(getUploadUrl) agar [[ $uploadUrl != "" ]]; keyin echo $UploadUrl json_out=`curl -s -T $1 -H "Authorization: OAuth $TOKEN" $uploadUrl` json_error=$(checkError "$json_out") agar [[ $json_error != "" ]] bo'lsa, logger "$PROJECT - Yandex.Disk xatosi: $json_error" pochta jo'natish "; $PROJECT - Yandex.Disk zahira nusxasini yaratish xatosi" "XATO $FILENAME faylini nusxalash Yandex.Disk xatosi: $json_error" else logger "$PROJECT - Faylni Yandex.Diskga nusxalash muvaffaqiyati" xabarini yuborish "$PROJECT - Yandex.Disk zaxira nusxasi muvaffaqiyatli" ". $FILENAME faylini SUCCESS nusxalash" fi else "Ba'zi xatoliklar yuz berdi. Jurnal faylini batafsil tekshirish" fi ) funksiyasi backups_list() ( # Biz ilova katalogidagi barcha zaxira fayllarni qidiramiz va ularning nomlarini ko'rsatamiz: curl -s -H "Avtorizatsiya. : OAuth $ TOKEN" "https://cloud-api.yandex.net:443/v1/disk/resources?path=app:/&sort=created&limit=100" | tr "()," "\n" | grep "name[[:graph:]]*.tar.gz" | kesilgan -d: -f 2 | tr -d """ ) funksiya backups_count() ( local bkps=$(backups_list | wc -l) # Agar biz ikkala faylni ham, ma'lumotlar bazasini ham zahira nusxasini yaratsak, u holda 1 ta zahira uchun bizda 2 ta fayl bo'ladi. Shuning uchun zaxiralar soni = fayllar soni / 2: expr $bkps / 2 ) funksiyasi remove_old_backups() ( bkps=$(backups_count) old_bkps=$((bkps - MAX_BACKUPS)) agar [ "$old_bkps" -gt "0" ];keyin logger "O'chirish" Yandex-dan eski zaxira nusxalari. Disk" # Eski zaxira nusxalarini o'chirish sikli: # Ro'yxatdagi birinchi faylni o'chirish 2*eski_bkps marta i uchun `eval echo (1..$((old_bkps * 2)))`; do curl -X DELETE -s - H " Avtorizatsiya: OAuth $TOKEN" "https://cloud-api.yandex.net:443/v1/disk/resources?path=app:/$(backups_list | awk "(NR == 1)")&doimiy= true" bajarildi fi ) logger "--- $PROJECT START BACKUP $DATE ---" logger "Ma'lumotlar bazasi dumpslarini yuklash" mkdir $BACKUP_DIR/$DATE i `mysql -h $MYSQL_SERVER -u $MYSQL_USER -p$MYSORD_ - e" ma'lumotlar bazalarini ko'rsatish;" grep -v ma'lumotlar bazasi`; mysql arxivi $BACKUP_DIR/$DATE-mysql-$PROJECT.tar.gz" tar -czf $BACKUP_DIR/$DATE-mysql-$PROJECT.tar.gz $BACKUP_DIR/$DATE rm -rf $BACKUP_DIR"/ Kataloglar arxivini yarating $BACKUP_DIR/$DATE-files-$PROJECT.tar.gz" tar -czf $BACKUP_DIR/$DATE-files-$PROJECT.tar.gz $DIRS FILENAME=$DATE-mysql-$PROJECT.tar .gz logger "Yandeks.Disk mysql arxivida yuklash $BACKUP_DIR/$DATE-mysql-$PROJECT.tar.gz" backupName=$DATE-mysql-$PROJECT.tar.gz uploadFile $BACKUP_DIR/$DATE-mysql-$P .tar.gz FILENAME =$DATE-files-$PROJECT.tar.gz logger "$BACKUP_DIR/$DATE-files-$PROJECT.tar.gz fayllari bilan arxivni Yandex.Diskga yuklash" backupName=$DATE-files- $PROJECT.tar.gz uploadFile $BACKUP_DIR/$DATE-files-$PROJECT.tar.gz logger "Diskdan arxivlarni o'chirish" toping $BACKUP_DIR -turi f -name "*.gz" -exec rm "()" \; # Yandex.Disk-dan eski zahira nusxalarini olib tashlang (agar MAX_ZAXIRA > 0 bo'lsa), agar [ $MAX_ZAXIRA -gt 0 ] bo'lsa; keyin eski_zaxiralarni olib tashlang; fi logger "Zaxiraviy skript tugallanmoqda"

Tayyor skript faylini ham yuklab olishingiz mumkin. Skript serverga joylashtirilishi kerak, parametrlar o'zingiznikiga almashtirilishi kerak, ishga tushirish huquqi (chmod +x) berilishi va har kuni cronda bajarilishi kerak. Agar siz ushbu vazifalarning bir nechtasini bajarishni rejalashtirmoqchi bo'lsangiz, ularni ishga tushirish orasidagi vaqtni belgilang (5-10 daqiqa).

– qulay, funktsional va arzon yechim. Handy Backup sizga Yandex.Disk uchun mashhur WebDAV interfeysidan foydalanishdan qochish imkonini beradi, buning o'rniga to'g'ridan-to'g'ri kirishdan foydalaning.

Yandex.Disk-ga avtomatik zaxiralash

Handy Backup yordamida siz Yandex.Disk-ga istalgan ma'lumotlarni avtomatik ravishda, jadval bo'yicha oylardan daqiqalargacha yoki hodisalar bo'yicha yoki qo'lda zaxiralashingiz mumkin. Siz har qanday ma'lumotlarni nusxalashni avtomatlashtirishingiz mumkin, masalan:


Foydalanuvchi ma'lumotlari:

  • Fayllar va papkalar (nom niqobi bo'yicha qidirish imkoniyati bilan)
  • Windows kutubxonalari, foydalanuvchi papkalari
  • Microsoft Outlook, boshqa elektron pochta mijozlarining fayllari va papkalari

Server ma'lumotlar turlari:

  • MS SQL, MySQL, MariaDB, PostgreSQL, Oracle, IBM DB2, Lotus Notes maʼlumotlar bazalari
  • Microsoft Exchange
  • SSL/TLS shifrlash bilan FTP, SFTP yoki FTPS serverlari tarkibi
  • Veb-saytlar (statik va dinamik tarkib)


Virtual mashinalar va saqlash:

  • Hyper-V, VMware
  • Serverlar, massivlar va virtual mashina xostlari
  • Bulutlar Google Drive, Dropbox, Amazon S3, OneDrive, Box, 4shared va boshqalar
  • WebDAV interfeysi orqali har qanday bulutlar

Boshqa ma'lumotlar turlari:

  • Disk tasvirlar
  • 1C ma'lumotlari fayl va SQL versiyalarida, 1C 7.7 va 1C 8 yechimlari uchun, masalan, 1C 8.2
  • Tarmoq mashinalarining fayllari, papkalari va kutubxonalari (tarmoq echimlari uchun)
  • Windows ro'yxatga olish kitobi

Yandex.Disk-da zaxira nusxalarini tashkil qilish uchun Handy Backup yechimining afzalliklari

Ma'lumotlaringizni himoya qilish

Handy Backup o'rnatilgan shifrlash va ma'lumotlarni parol bilan himoyalangan arxivga siqish orqali tijorat ma'lumotlarini xavfsiz uzatish imkonini beradi. ochiq tarmoqlar va ma'lumotlar yaxlitligi uchun qo'rqmasdan uni ommaviy bulut xizmatida saqlang.

Mahsulot sertifikati

Roʻyxatda keltirilgan barcha asosiy tijorat yechimlari bilan mos keladigan rasmiy sertifikatga ega boʻlishdan tashqari, Handy Backup ham oʻz ichiga oladi. Rossiya kompyuter dasturlari yagona reestri.


Asl formatdagi nusxalarni ochiq saqlash

dan farqli o'laroq ishonchli himoya shifrlash va siqish vositalari tomonidan taqdim etiladi, umuman Handy Backup yaratadi zaxira nusxalari asl fayl formatini saqlab qolgan holda. Bu sizga oddiy fayllar sifatida zaxira nusxalarini ko'rish, tahrirlash va hatto tiklash imkonini beradi.


Yuklab olish

Sotib oling!

2017-yil 15-sentabrdagi 7.9.4-versiyasi. 66,1 MB
Dastur Zaxira nusxasi Foydali zaxira. 7400 rubl litsenziya uchun

Office Expert yechimi istalgan turdagi ma'lumotlarni bitta kompyuterdan Yandex.Diskga avtomatik ravishda jadval bo'yicha to'g'ridan-to'g'ri va WebDAV orqali nusxalash imkonini beradi. Bepul sinov muddati 30 kun!

Handy Backup-da Yandex.Disk-ga zaxira vazifasini qanday yaratish mumkin?

Eskirgan WebDAV zaxira nusxasi o'rniga endi Yandex.Disk zaxira nusxalarini tashkil qilish uchun ishlatiladi yangi plagin Handy Backup Yandex Disk kirish imkoniyati bilan bulut xizmati RestAPI interfeysi orqali. Uni ishlatish uchun quyidagi amallarni bajaring:

  1. Handy Backup-ni oching va panel yoki menyudagi tugma yordamida yangi vazifa yarating.
  2. Zaxira vazifasini tanlang.
  3. ga oʻtish 2-qadam va zaxira nusxasini yaratish uchun kerakli ma'lumotlarni tanlang.
  4. Yoniq 3-qadam saqlash ro'yxatidan plaginni tanlang Yandex.Disk, ustiga ikki marta bosing.


  1. Ochilgan oynada sichqonchani ikki marta bosing "Yangi konfiguratsiya". Yangi dialog oynasi ochiladi.

  1. Tugmani bosing "Yandex.Diskga ulanish". Siz brauzeringizga yo'naltirilasiz.
  2. Brauzer oynasida kiriting kirish uchun login va parol Yandex.Disk-ga. Tanlovingizni tasdiqlang.


  1. Handy Backup oynasiga qayting va yaratilgan konfiguratsiyani tanlang.
  2. Keyin odatdagidek vazifani o'rnatishni davom eting. Yoniq 6-qadam jadvalini ko'rsating.
  3. Oxirgi bosqichda vazifangizga nom bering va Vazifa yaratish ustasini bajaring.

Yandex.Disk-ga avtomatik zahiraviy yuklash vazifangiz bajarishga tayyor va kelajakda belgilangan chastotada belgilangan vaqtda ishga tushiriladi. Siz uni istalgan vaqtda qo'lda boshlashingiz mumkin.

Izoh: xuddi shu tarzda, boshqa bulut xizmatlariga ma'lumotlarni nusxalash uchun vazifalar yaratiladi: Google Drive, Dropbox, Microsoft OneDrive, Amazon S3, Box va boshqalar.

Yandex Disk zaxiralash haqida video dars

Ushbu video darslik Yandex Disk-ga zaxira nusxasini yaratish, shuningdek, ushbu bulutda saqlangan ma'lumotlarni zaxiralash bo'yicha ko'rsatmalarni o'z ichiga oladi.

Diqqat: Bu video Ko'rsatmalar Handy Backup dasturi allaqachon kompyuterda o'rnatilgan degan taxminga asoslanadi. Agar bunday bo'lmasa, video darslikni boshlashdan oldin Handy Backup dasturini yuklab oling va o'rnating.

WebDAV orqali Yandex.Diskga zaxiralash

Yandex.Disk xizmatiga to'g'ridan-to'g'ri kirish uchun yangi vosita mavjudligiga qaramasdan, ba'zi hollarda an'anaviy usul afzalroq bo'lishi mumkin - masalan, tashqi kriptografiya yordam dasturidan foydalangan holda WebDAV orqali Yandex.Disk-ga saytni zaxiralash.

Handy Backup WebDAV protokoli yordamida Yandex.Disk-ga zaxiralashni to'liq qo'llab-quvvatlaydi.

  • Yandex.Disk-ga kirish uchun WebDAV-dan foydalanish uchun yuqorida tavsiflangan vazifani yaratish algoritmidan foydalanib, 3-bosqichda WebDAV plaginini tanlang. WebDAV konfiguratsiyasi dialog oynasida Yandex.Diskga kirish sozlamalarini kiriting.

Diqqat: WebDAB-dan foydalanganda Yandex.Disk-ga zaxiralash to'g'ridan-to'g'ri kirishga qaraganda biroz sekinroq bo'lishi mumkin. Misol uchun, 1C-ni Yandex.Disk-ga zaxiralash odatda WebDAV-dan foydalanganda sezilarli vaqtni oladi.

Yandex.Disk-ga Handy Backup yordamida avtomatik zaxiralash Yandex bulut xizmatiga to'g'ridan-to'g'ri kirishdan foydalanadigan yangi vositaning joriy etilishi bilan yanada oson va tezroq bo'ldi. 30 kunlik bepul sinov versiyasini yuklab olib, o'zingiz sinab ko'ring!

Men Yandex.Disk tomonidan taqdim etilgan barcha zavqlarni tasvirlamayman, hamma ularni biladi ... Va ulardan biri Yandex Disk-ga VPS zaxira nusxasini tashkil qilish qobiliyatidir. Mening serverim Debian-da ishlaydi, shuning uchun biz uni ko'rib chiqamiz. Odatdagidek, unutmaslik uchun!
Aslida, men bir yildan ko'proq vaqt oldin zaxira nusxasini o'rnatdim, lekin yaqinda nimadir buzildi va men uni o'rnatish haqida ma'lumotni yana birlashtirishga majbur bo'ldim. Ko'p foydali maqolalar va ma'lumotlar bor, lekin tan olamanki, men "birdaniga" hech narsa topa olmadim. Shuning uchun men yozyapman, hamma narsani bir joyda to'playman, ta'bir joiz bo'lsa, o'zim uchun, balki boshqa birovga ham foydali bo'lar. Buzilishning sabablari quyida, men buni tushundim, lekin endi sozlamalar haqida ...
1. Fayllarni Y.Diskga nusxalash WebDAV protokoli orqali amalga oshiriladi va serverimizda birinchi navbatda davfs2 yordam dasturini o'rnatishimiz kerak.
# apt-get o'rnatish davfs2
2. O'rnatish nuqtasini yoki oddiyroq qilib aytganda, bizning serverimizda zaxira nusxalarimiz "tashlab qo'yiladigan" papkani yarating, mening holimda u: mnt/yandex.disk
# mkdir /mnt/yandex.disk
3. Har safar diskingiz uchun login va parolni qo'lda kiritmaslik uchun biz ularni davfs2 konfiguratsiya faylida saqlaymiz. Bu yerda: /etc/davfs2/secrets, uni shunday saqlang:
# echo "https://webdav.yandex.ru SIZNING_YANDEX_LOGIN_YANDEX_PAROLINGIZ" >> /etc/davfs2/secrets
4. Diskni o'rnating:
# mount -t davfs https://webdav.yandex.ru /mnt/yandex.disk/
5. Bizda hammasi yaxshi yoki yo'qligini tekshiring:
# df -h /mnt/yandex.disk/
Agar hamma narsa birga o'sgan bo'lsa, unda biz shunga o'xshash narsani ko'rishimiz kerak:
Foydalanilgan fayl tizimi hajmi Foydalanish% Oʻrnatilgan
https://webdav.yandex.ru
10G 1G 10G 10% /mnt/yandex.disk
6. Serverni qayta ishga tushirgandan so'ng, biz hamma narsani yana qo'lda o'rnatishimiz shart emas, shuning uchun /etc/rc.local fayliga yozing:
uyqu 120 && mount -t davfs https://webdav.yandex.ru /mnt/yandex.disk
Biz buni 0-chiqish bilan chiziq ustiga yozamiz. 120 raqami - soniyalarda bajarilish kechikishi. Asos sifatida, qiymat kamroq yoki ko'proq o'rnatilishi mumkin ... O'rnatishdan oldin menda ikki daqiqalik kechikish bor, shunda hamma narsa aniq yuklanadi.
O'rnatishdan so'ng, /mnt/yandex.disk papkasi Yandex.Disk bilan sinxronlashtiriladi va biz faqat serverda zaxira nusxalarini sozlashimiz kerak, ya'ni ular /mnt/yandex.disk papkasida saqlanadi... Lekin. Bu boshqa maqola uchun mavzu ..) Bo'ldi!..

Lekin yo'q, hammasi emas ...

Esingizda bo'lsin, maqolaning boshida men "bir narsa buzilgan" deb aytdim ... Va u buzilgan, ma'lum bo'lishicha, FUSE. Yoki yadro yangilanishi paytida yoki boshqa sabablarga ko'ra u buzildi. Natijada, montaj qilishda men "/sbin/mount.davfs: o'rnatish uchun bepul koda qurilmasi yo'q" va blah blah blah bir xil ruhda yana bir nechta satrlarni oldim. FUSE men uchun mavjud edi, lekin boshlanmadi. Ishga tushirilgan:
#modprobefuse
Biroq, VPS-ni qayta ishga tushirgandan so'ng, uni yana qo'lda boshlash kerak edi. Albatta, /etc/initramfs-tools/modules faylining oxiriga sug'urta qo'shish orqali yadroni qayta tiklashingiz yoki buni osonroq qilishingiz mumkin.
Yoki oddiyroq:
# echo "sug'urta" >> /etc/modules
Habrning ushbu retsepti men uchun ishladi.
Bo'ldi shu. Hammasi joyida degan ma'noda!

Yandex.Disk - bu uning bir qismi bo'lgan bir nechta Yandex xizmatlaridan biridir dasturiy ta'minot ish stoli uchun. Va uning eng muhim tarkibiy qismlaridan biri sinxronizatsiya algoritmidir mahalliy fayllar bulutdagi ularning nusxasi bilan. Yaqinda biz uni butunlay o'zgartirishga majbur bo'ldik. Agar eski versiya hatto bir necha o'n minglab fayllarni hazm qilishda qiynalgan bo'lsa va bundan tashqari, foydalanuvchining ba'zi "murakkab" harakatlariga tezda javob bermasa, yangisi xuddi shu resurslardan foydalanib, yuz minglab fayllarni engadi.

Ushbu postda men sizga nima uchun bu sodir bo'lganini aytib beraman: biz Yandex.Disk dasturiy ta'minotining birinchi versiyasini ishlab chiqqanimizda nimani oldindan ko'ra olmadik va qanday qilib yangisini yaratdik.

Avvalo, sinxronizatsiya vazifasining o'zi haqida. Texnik jihatdan, u foydalanuvchining kompyuterida va bulutda Yandex.Disk papkasida bir xil fayllar to'plamiga ega bo'lishdan iborat. Ya'ni, fayllar nomini o'zgartirish, o'chirish, nusxalash, qo'shish va o'zgartirish kabi foydalanuvchi harakatlari avtomatik ravishda bulut bilan sinxronlashtirilishi kerak.

Nega bu birinchi qarashda ko'rinadigan darajada oddiy emas?

Nazariy jihatdan, vazifa juda oddiy ko'rinishi mumkin, lekin aslida biz turli xil murakkab vaziyatlarga duch kelamiz. Misol uchun, bir kishi o'z kompyuteridagi papka nomini o'zgartirdi, biz buni aniqladik va orqa qismga buyruq yubordik. Biroq, foydalanuvchilarning hech biri qayta nomlash muvaffaqiyatini tasdiqlash uchun backend kutmaydi. Biror kishi darhol mahalliy nomi o'zgartirilgan jildni ochadi, unda pastki papka yaratadi va, masalan, ba'zi fayllarni unga o'tkazadi. Biz bulutda barcha kerakli sinxronizatsiya operatsiyalarini darhol amalga oshirishning iloji bo'lmagan vaziyatga tushib qoldik. Avval siz birinchi operatsiya tugashini kutishingiz kerak va shundan keyingina davom etishingiz mumkin.

Agar bir vaqtning o'zida bir nechta foydalanuvchi bir xil hisobda ishlayotgan bo'lsa yoki umumiy papkaga ega bo'lsa, vaziyat yanada murakkablashishi mumkin. Va bu Yandex.Disk-dan foydalanadigan tashkilotlarda tez-tez sodir bo'ladi. Tasavvur qiling-a, oldingi misolda, biz backenddan birinchi qayta nomlash haqidagi tasdiqni olganimizda, boshqa foydalanuvchi ushbu jildni qayta nomlaydi va qayta nomlaydi. Bunday holda, birinchi foydalanuvchi o'z kompyuterida allaqachon bajargan harakatlarni darhol amalga oshirishning iloji yo'q. U mahalliy sifatida ishlagan papka hozirda backendda boshqacha chaqirilgan.

Ba'zida foydalanuvchining kompyuteridagi faylni bulutda chaqirilgandek nomlash mumkin emas. Agar nomda mahalliy fayl tizimi tomonidan foydalanilmaydigan belgi bo'lsa yoki foydalanuvchi taklif qilingan bo'lsa, bu sodir bo'lishi mumkin umumiy jild, va uning shunday nomli o'z papkasi mavjud. Bunday hollarda biz mahalliy taxalluslardan foydalanishimiz va ularning bulutdagi ob'ektlar bilan bog'lanishini kuzatishimiz kerak.

Algoritmning oldingi versiyasi

IN oldingi versiya Yandex.Disk ish stoli dasturi o'zgarishlarni qidirish uchun daraxt taqqoslash algoritmidan foydalangan. O'sha paytdagi boshqa har qanday yechim harakatlar va nomlarni o'zgartirishni qidirishga imkon bermadi, chunki orqa tomonda noyob ob'ekt identifikatorlari yo'q edi.

Algoritmning ushbu versiyasida biz uchta asosiy daraxtdan foydalandik: mahalliy (Mahalliy indeks), bulut (masofaviy indeks) va oxirgi sinxronlashtirilgan (Barqaror indeks). Bundan tashqari, allaqachon navbatga qo'yilgan sinxronizatsiya operatsiyalarini qayta tiklashning oldini olish uchun yana ikkita yordamchi daraxt ishlatilgan: kutilgan mahalliy va bulutli kutilayotgan (Kutilayotgan masofaviy indeks va kutilayotgan mahalliy indeks). Ushbu yordamchi daraxtlar mahalliy aholining kutilgan holatini saqlab qoldi fayl tizimi va bulutlar, allaqachon navbatga qo'yilgan barcha sinxronlash operatsiyalarini tugatgandan so'ng.



Qadimgi algoritmdagi daraxtlarni taqqoslash tartibi quyidagicha edi:
  1. Mahalliy kutish daraxti va bulutli kutish daraxti bo'sh bo'lsa, oxirgi sinxronlangan daraxtdan nusxa ko'chirish orqali ularni ishga tushiring;
  2. Biz mahalliy daraxtni kutilgan bulut daraxti bilan taqqoslaymiz va alohida tugunlarni taqqoslash natijalariga ko'ra bulutdagi sinxronizatsiya operatsiyalarini navbatga qo'shamiz (to'plamlar yaratish, fayllarni bulutga o'tkazish, bulutda ko'chirish va o'chirish);
  3. Oldingi bosqichda navbatga qo'yilgan barcha operatsiyalar uchun biz ularning kelajakdagi ta'sirini kutilgan bulut daraxtiga yozamiz;
  4. Biz bulut daraxtini kutilgan mahalliy daraxt bilan taqqoslaymiz va individual tugunlarni taqqoslash natijalariga ko'ra navbatga mahalliy fayl tizimi bilan sinxronizatsiya operatsiyalarini qo'shamiz (kataloglarni yaratish, bulutdan fayllarni yuklab olish, mahalliy fayllar va kataloglarni ko'chirish va o'chirish) ;
  5. Oldingi bosqichda navbatga qo'yilgan barcha operatsiyalar uchun biz ularning kelajakdagi ta'sirini kutilgan mahalliy daraxtga yozamiz;
  6. Agar bir xil fayl yoki katalog bilan bir vaqtda operatsiyalar navbatga tushib qolsa (masalan, faylni bulutga o'tkazish va bulutdan bir xil faylni yuklab olish), u holda biz ziddiyatni qayd etamiz - fayl ikki joyda o'zgargan;
  7. Bulutda yoki mahalliy fayl tizimida sinxronizatsiya operatsiyasi tugallangandan so'ng, biz uning natijasini oxirgi sinxronlashtirilgan daraxtga kiritamiz;
  8. Sinxronizatsiya navbati bo'sh bo'lganda, biz mahalliy kutish va bulutli kutish daraxtlarini o'chirib tashlaymiz. Sinxronizatsiya tugallandi va bizga endi ular kerak bo'lmaydi.

Nima uchun biz yangi algoritm bilan chiqishimiz kerak edi

Daraxtlarni taqqoslash algoritmining asosiy muammolari edi yuqori iste'mol xotira va butun daraxtlarni kichik o'zgarishlar bilan ham solishtirish zarurati, bu protsessorga katta yuk olib keldi. Hatto bitta faylga kiritilgan o'zgarishlarni qayta ishlashda foydalaning tasodifiy kirish xotirasi taxminan 35% ga oshdi. Aytaylik, foydalanuvchida 20 000 ta fayl bor edi. Keyin, 10 KB hajmdagi bitta fayl nomini o'zgartirganda, xotira iste'moli keskin o'sdi - 116 MB dan 167 MB gacha.

Shuningdek, foydalanuvchi muammosiz ishlashi mumkin bo'lgan maksimal fayllar sonini ko'paytirishni xohladik. Misol uchun, Yandex.Disk-da fotosessiya natijalarini saqlaydigan fotosuratchi bir necha o'nlab yoki hatto yuz minglab fayllarga ega bo'lishi mumkin. Odamlar Yandex.Disk-da qo'shimcha joy sotib olish imkoniga ega bo'lganda, bu vazifa ayniqsa dolzarb bo'ldi.

Men ham rivojlanishda ba'zi narsalarni o'zgartirmoqchi edim. Nosozliklarni tuzatish eski versiya qiyinchiliklarga olib keldi, chunki bitta elementning holati to'g'risidagi ma'lumotlar turli xil daraxtlarda edi.

Bu vaqtga kelib, orqa tomonda ob'ekt identifikatorlari paydo bo'ldi, ularning yordamida harakatlarni aniqlash muammosini samaraliroq hal qilish mumkin edi - ilgari biz yo'llardan foydalanganmiz.

Yangi algoritm

Biz ma'lumotlarni saqlash tuzilmasini o'zgartirishga va uchta daraxtni (Mahalliy indeks, masofaviy indeks, barqaror indeks) bittaga almashtirishga qaror qildik, bu esa asosiy ma'lumotlar tuzilmasida ortiqcha miqdorni kamaytirishga olib kelishi kerak edi. Daraxtdagi kalit fayl tizimi elementiga yo'l bo'lganligi sababli, birlashish natijasida foydalanilgan RAM miqdori sezilarli darajada kamaydi.



Sinxronizatsiya paytida biz yordamchi daraxtlardan foydalanishni ham to'xtatdik, chunki yangi versiyadagi har bir daraxt elementi barcha kerakli ma'lumotlarni saqlaydi. Tuzilishdagi bu o'zgarish kodni tuzatishni ancha osonlashtirdi.

Bu katta o'zgarish ekanligini tushunganimiz sababli, biz yangi yechimning samaradorligini tasdiqlovchi prototipni yaratdik. Keling, yangi faylni sinxronlashtirishda daraxtdagi ma'lumotlar qanday o'zgarishiga misolni ko'rib chiqaylik.

  1. Foydalanuvchi Drive jildiga qo'shgandan so'ng yangi fayl, dastur uni aniqladi va daraxtga yangi element qo'shdi. Ushbu element faqat bitta ma'lum holatga ega - mahalliy. Barqaror va uzoq holatlar mavjud emasligi sababli ular uchun xotira ajratilmaydi;
  2. Dastur faylni yuklaydi. Bulutdan surish keladi, bu yangi faylning ko'rinishini tasdiqlaydi va masofaviy holat daraxtga qo'shiladi;
  3. Mahalliy va chekka shtatlar solishtiriladi. Ular mos kelgani uchun barqaror holat qo'shiladi;
  4. Mahalliy va uzoq shtatlar olib tashlandi. Ular endi kerak emas, chunki barcha ma'lumotlar barqaror.



Ushbu misol shuni ko'rsatadiki, yangi sinxronizatsiya algoritmi avvalgidek butun daraxtni emas, balki faqat o'zgarishlar ma'lumotlari fayl tizimi yoki bulutdan olingan elementlar va hodisalarni qayta ishlaydi. Ota-onalar yoki bolalar tugunlari kerak bo'lganda qayta ishlanadi (masalan, agar jild ko'chirilgan bo'lsa).

Boshqa yaxshilanishlar

Yangi versiyada biz ishlashga ta'sir qilgan boshqa yaxshilanishlar ustida ham ishladik. Daraxtni saqlash bosqichma-bosqich amalga oshirildi, bu sizga faylga faqat oxirgi o'zgarishlarni yozish imkonini beradi.

Yandex.Disk sha256 va MD5 dayjestlaridan fayllarning yaxlitligini tekshirish, o'zgartirilgan fragmentlarni aniqlash va backenddagi fayllarni takrorlash uchun foydalanadi. Ushbu vazifa juda ko'p CPU intensiv bo'lgani uchun, yangi versiyada dayjest hisob-kitoblarini amalga oshirish sezilarli darajada optimallashtirildi. Fayl dayjestini qabul qilish tezligi taxminan ikki baravar oshirildi.

Raqamlar

Har biri 10 Kb bo'lgan 20 000 ta noyob faylni sinxronlashtirish

Har biri 10 kb bo'lgan noyob 20 000 faylning dayjestlarini hisoblash (indekslash)

20 000 sinxronlashtirilgan 10 Kb fayllar bilan ishga tushiring

1 Gb yuklang. Wi-Fi ulanishi 10 Mbit
Vaqt, sek

Nima bo'ldi

Buni misollardan ko'rish mumkin yangi versiya Yandex.Disk dasturi operativ xotirani taxminan 3 baravar kam ishlatadi va protsessorni taxminan 2 barobar kamroq yuklaydi. Kichik o'zgarishlarni qayta ishlash ishlatiladigan xotira hajmini oshirmaydi.

Kiritilgan o'zgarishlar natijasida dastur muammosiz ishlay oladigan fayllar soni sezilarli darajada oshdi. Windows uchun versiyada - 300 000, Mac OS X da - 900 000 fayl.



gastroguru 2017