← ყველა სტატია

multipathd-მა Longhorn-ის ტომი მიითვისა: „mount point busy“, თუმცა არაფერია დამონტაჟებული

პოდი ხუთი დღე Init-ში იდგა, 2413 მონტაჟის მცდელობა, სრულმა რებუტმა არ უშველა. multipathd-მა Longhorn-ის iSCSI მოწყობილობაზე რუკა ააგო და ღიად ეჭირა.

ჩემს სახლის ლაბორატორიაში SonarQube-ის პოდი ხუთი დღე იდგა Init:0/2-ში და ერთსა და იმავე მონტაჟს 2413-ჯერ იმეორებდა:

mount: .../globalmount: /dev/longhorn/pvc-... already mounted or mount point busy.

აშკარა წაკითხვა — ბინძური რებუტის შემდეგ დარჩენილი გაჭედილი mount. ეს არასწორი იყო და მტკიცებულება მარტივია: შეცდომამ ყველა ნოდის სრული power cycle გადაიტანა, ზუსტად ის კი გაჭედილ მონტაჟებს ხსნის.

მიჰყევი მოწყობილობას და არა შეტყობინებას

შეტყობინება მონტაჟის წერტილზე საუბრობს, ამიტომ ჯერ მონტაჟები შევამოწმე:

mount | grep pvc-6e83 || echo "not mounted anywhere"
for f in /proc/[0-9]*/mounts; do grep -q pvc-6e83 "$f" && echo "$f"; done

ცარიელია, არც ერთ mount namespace-ში. ესე იგი, მონტაჟის წერტილი თავისუფალია. შეტყობინების მეორე ნახევარი — „busy“ — მოწყობილობაზეა. ძიება ერთმა ბრძანებამ დაასრულა:

lsof /dev/sdb
# multipath 429 root 10r BLK 8,16

ბლოკური მოწყობილობის vendor და model — IET / VIRTUAL-DISK, ეს Longhorn-ის iSCSI target-ია. multipath -ll-მა კი მის თავზე აგებული რუკა აჩვენა.

ძირეული მიზეზი

Longhorn v1 ძრავა ტომებს iSCSI-ით ჩვეულებრივ /dev/sdX მოწყობილობებად აწვდის. multipathd ოთხივე ვორკერზე ცარიელი blacklist-ით მუშაობდა, ტომი multipath-ის კანდიდატად ჩათვალა, მასზე რუკა ააგო და მოწყობილობა ღიად ეჭირა. mount(8) ამას „already mounted or mount point busy“-ად აცხადებს და არარსებული მონტაჟის საძებნელად გაგზავნის. ეს რებუტისადმი მდგრადობასაც ხსნის: multipathd ადრე ეშვება და ყოველ ჩატვირთვაზე მოწყობილობას თავიდან იჭერს.

მონაცემებს საფრთხე არ ემუქრებოდა: e2fsck -n-მა ცვლილებებამდე სუფთა ფაილური სისტემა აჩვენა.

შესწორება

Longhorn-ის მოწყობილობები blacklist-ში vendor-ითა და product-ით შევიტანე — არა devnode "^sd.*"-ით, რომელიც multipath-ს ყველაფრისთვის თიშავს, — შემდეგ რუკა წავშალე და დემონი გადავტვირთე:

blacklist {
    device {
        vendor "IET"
        product "VIRTUAL-DISK"
    }
}

მთავარი იყო ამის გაკეთება ყველა ნოდზე. ერთი ტომი დაიჭირეს, მაგრამ მდგომარეობა ოთხივე ვორკერზე ფარული იყო: Longhorn-ის ნებისმიერი ტომი შეიძლებოდა მიეთვისებინა პოდის შემდეგ რესტარტზე.

დასკვნები

  • „already mounted or mount point busy“ ცარიელი mount-ის დროს ნიშნავს, რომ მოწყობილობა უჭირავთ. lsof ბლოკურ მოწყობილობაზე ძიებას ასრულებს.
  • თუ რებუტი „გაჭედილ“ მდგომარეობას ვერ ხსნის, ის გაჭედილი არ არის — რაღაც ჩატვირთვისას ხელახლა ქმნის.
  • Longhorn v1-ისა და multipath-tools-ის მქონე ყველა ნოდს vendor/product blacklist სჭირდება. დაამატე ნოდების bootstrap-ში.
  • შეაკეთე კლასი და არა ეგზემპლარი: ერთ ნოდზე ნაპოვნი პრობლემა ხშირად ყველაზეა.