লিনাক্স ডিভাইস-ম্যাপার মানচিত্রগুলি LVM পিভি স্ন্যাপশট নেওয়ার সময় এলভি-র ভিতরে


13

যা সত্যই এই মেশিনটির ব্যাকআপ নেওয়ার আমার পরিকল্পনার সাথে গোলমেলে ...

আমার একটি সার্ভার রয়েছে যা বেশ কয়েকটি ভার্চুয়াল মেশিনের কেভিএম হাইপারভাইজার। এর মধ্যে একটি ডকর চালাচ্ছে। এটির / ডিভ / ভিডিবিতে এটির ডকার ভলিউম রয়েছে, যা একটি এলভিএম পিভি হিসাবে সেট আপ করা হয়, যার উপরে ডকার তার সরাসরি- lvm ড্রাইভারকে ডকারের ধারক ডেটা সংরক্ষণ করার জন্য ব্যবহার করে । এই ভার্চুয়াল ডিস্কটি হোস্টের স্থানীয় ডিস্কের একটি এলভিএম এলভি।

হোস্ট এবং অতিথি উভয়ই ফেডোরা 21 চালায়।

এই ভলিউমের হোস্টের দর্শন (কেবলমাত্র প্রাসঙ্গিক ভলিউম প্রদর্শিত হবে):

[root@host ~]# lvs
  LV                           VG         Attr       LSize
  docker2.example.com-volumes vm-volumes -wi-ao---- 40.00g
[root@host ~]# dmsetup ls --tree
vm--volumes-docker2.example.com--volumes (253:10)
 └─ (9:125)

এই ভলিউমের অতিথির দৃষ্টিভঙ্গি (আবার, কেবলমাত্র প্রাসঙ্গিক ভলিউম প্রদর্শিত হবে):

[root@docker2 ~]# pvs
  PV         VG             Fmt  Attr PSize  PFree
  /dev/vdb   docker-volumes lvm2 a--  40.00g    0 

হোস্টের অন্যান্য সমস্ত এলভিএম ভলিউমের সাথে আমি একটি স্ন্যাপশট নিতে পারি, স্ন্যাপশটটি lvcreate --snapshotব্যাকআপ করতে পারি এবং তারপরে lvremoveএটি কোনও সমস্যা নেই। তবে এই নির্দিষ্ট ভলিউমের সাথে, এটি আমি ব্যবহার করতে পারছি lvremoveনা কারণ:

[root@host ~]# lvremove /dev/vm-volumes/snap-docker2.example.com-volumes 
  Logical volume vm-volumes/snap-docker2.example.com-volumes is used by another device.

শেষ পর্যন্ত আমি হোস্টের ডিভাইস-ম্যাপারটিকে একরকম বুঝতে পেরেছিলাম যে এই লজিক্যাল ভলিউম স্ন্যাপশটে একটি এলভিএম পিভি রয়েছে এবং তারপরে হোস্টের কাছে স্ন্যাপশটের মধ্যে লজিক্যাল ভলিউমগুলি ম্যাপ করার জন্য এগিয়ে গেছে (কেবলমাত্র প্রাসঙ্গিক খণ্ডগুলি দেখানো হয়েছে):

[root@host ~]# dmsetup ls --tree
vm--volumes-docker2.example.com--volumes (253:10)
 └─vm--volumes-docker2.example.com--volumes-real (253:14)
    └─ (9:125)
docker--volumes-docker--data (253:18)
 └─vm--volumes-snap--docker2.example.com--volumes (253:16)
    ├─vm--volumes-snap--docker2.example.com--volumes-cow (253:15)
    │  └─ (9:125)
    └─vm--volumes-docker2.example.com--volumes-real (253:14)
       └─ (9:125)
docker--volumes-docker--meta (253:17)
 └─vm--volumes-snap--docker2.example.com--volumes (253:16)
    ├─vm--volumes-snap--docker2.example.com--volumes-cow (253:15)
    │  └─ (9:125)
    └─vm--volumes-docker2.example.com--volumes-real (253:14)
       └─ (9:125)

এগুলি ভিএম এর অভ্যন্তরে যৌক্তিক আয়তনের সাথে হুবহু মিল:

[root@docker2 ~]# lvs
  LV          VG             Attr       LSize
  docker-data docker-volumes -wi-ao---- 39.95g
  docker-meta docker-volumes -wi-ao---- 44.00m

উল্লেখযোগ্যভাবে, সিস্টেমটি বুট করার সময় এটি LVM LV তে এটি করার চেষ্টা করে না, তবে কেবল যখন আমি স্ন্যাপশট নেব।

এখানে কি হচ্ছে? LVM স্ন্যাপশটের বিষয়বস্তু পরিদর্শন করে ডিভাইস-ম্যাপারটি সত্যই চাই না যে সেগুলির মধ্যে এমন কিছু আছে যাতে এটি আমার জন্য অনিচ্ছাকৃতভাবে ম্যাপ করতে পারে to আমি কি এই আচরণটি দমন করতে পারি? বা অন্য কোনও পদ্ধতির মাধ্যমে আমাকে স্ন্যাপশট তৈরি করতে হবে?

উত্তর:


8

কখনও কখনও প্রাসঙ্গিক ডকুমেন্টেশন ডকুমেন্টেশন না বলে কনফিগারেশন ফাইলগুলিতে লুকিয়ে থাকে। সুতরাং এটি LVM দিয়ে মনে হয়।

ডিফল্টরূপে LVM স্বয়ংক্রিয়ভাবে যেকোন শারীরিক ডিভাইসগুলিতে ভলিউম সক্রিয় করার চেষ্টা করবে যা বুটের পরে সিস্টেমের সাথে সংযুক্ত হয়ে যায়, যতক্ষণ না সমস্ত পিভি উপস্থিত থাকে এবং lvmetad এবং udev (বা অতি সম্প্রতি সিস্টেমড) চলছে। যখন LVM স্ন্যাপশটটি তৈরি হয়ে যায়, একটি udev ইভেন্ট বন্ধ হয়ে যায়, এবং যেহেতু স্ন্যাপশটে একটি পিভি থাকে, lvmetad স্বয়ংক্রিয়ভাবে চলে pvscanএবং আরও অনেক কিছু।

দেখে /etc/lvm/backup/docker-volumesআমি নির্ধারণ করতে সক্ষম হয়েছি যে pvscanডিভাইসটির বড় এবং ছোটখাট সংখ্যাগুলি ব্যবহার করে Lvmetad স্পষ্টভাবে স্ন্যাপশটে চালিয়েছে , যা সাধারণত LVM ফিল্টারগুলি বাইপাস করে যা সাধারণত এটি প্রতিরোধ করে would ফাইলটি রয়েছে:

description = "Created *after* executing 'pvscan --cache --activate ay 253:13'"

এই আচরণটি auto_activation_volume_listইন সেট করে নিয়ন্ত্রণ করা যায় /etc/lvm/lvm.conf। এটি আপনাকে কোন ভলিউম গ্রুপ, ভলিউম, বা ট্যাগগুলি স্বয়ংক্রিয়ভাবে সক্রিয় করার অনুমতি দেয় তা সেট করতে দেয়।

সুতরাং, আমি কেবল ফিল্টারটি হোস্টের জন্য উভয় ভলিউম গ্রুপের জন্য সেট করেছিলাম; অন্য কিছু ফিল্টারটির সাথে মেলে না এবং স্বয়ংক্রিয়ভাবে সক্রিয় হয় না।

auto_activation_volume_list = [ "mandragora", "vm-volumes" ]

অতিথির এলভিএম ভলিউমগুলি আর হোস্টে উপস্থিত হবে না এবং অবশেষে, আমার ব্যাকআপগুলি চলছে ...


4

আপনি কেভিএম হোস্টের কেবলমাত্র দৈহিক ডিভাইসগুলি পরীক্ষা করতে /etc/lvm/lvm.conf এ 'ফিল্টার' মানটি সম্পাদনা করতে চান; ডিফল্ট মান 'প্রতিটি ব্লক ডিভাইস' গ্রহণ করে যার মধ্যে তাদের এলভি থাকে। ডিফল্ট মানের উপরে মন্তব্যটি মোটামুটি বিস্তৃত এবং আমার ব্যবহারের চেয়ে ব্যাখ্যার আরও ভাল কাজ করতে পারে।


মনে রাখবেন যে আমি ফিল্টারটি যুক্ত করেছি, এবং pvscan --cacheনতুন ফিল্টার সম্পর্কে lvmetad বলতে দৌড়ে এসেছি এবং pvscanএখন জানিয়েছি পিভি ফিল্টার দ্বারা প্রত্যাখ্যান করা হচ্ছে, তবে সমস্যাটি এখনও থেকেই যায়।
মাইকেল হ্যাম্পটন

আমি ধরে নিয়েছি আপনি স্ন্যাপশট অপসারণ করতে অক্ষমতা বলতে চাইছেন। এই পর্যায়ে, এটি মুশকিল হতে পারে এবং আমি কেবল অস্পষ্ট পরামর্শ দিতে পারি। কেভিএম হোস্টকে রিবুট করা যদি প্রশ্নটির বাইরে থাকে (এবং আমি স্বীকার করি যে এটি একটি স্লেজহ্যামার পদ্ধতির), তবে সম্ভবত হোস্টের 'lvchange -an / path / to / LV' এর হোল্ডটি প্রকাশ করবে। যদি তা না হয় তবে আপনি সম্ভবত এলভিএম সরঞ্জামগুলি চেষ্টা করে এবং বাইপাস করার জন্য বিভিন্ন ডিএমসেটআপ ক্রিয়াকলাপ নিয়ে পরীক্ষায় যাচ্ছেন। যদিও এটি সেখানে লোমশ হয়ে যায়, এবং আমি কোনও নির্দিষ্ট ক্রিয়াকলাপের প্রস্তাব দিতে স্বাচ্ছন্দ্য বোধ করি না।
ক্রেগ মিস্কেল

ফিল্টার কিছুই করে না কারণ lvmetad একটি udev ইভেন্টের প্রতিক্রিয়াতে স্পষ্টতই স্ন্যাপশটটি স্ক্যান করছে। সমাধানটি কনফিগারেশনের কিছু অন্য রূপে পরিণত হয়েছে, যদিও ...
মাইকেল হ্যাম্পটন

2

আমি প্রায় একই সমস্যার সাথে মিলিত হয়েছি vgimportclone। এটি কখনও কখনও এটি দিয়ে ব্যর্থ হবে:

  WARNING: Activation disabled. No device-mapper interaction will be attempted.
  Physical volume "/tmp/snap.iwOkcP9B/vgimport0" changed
  1 physical volume changed / 0 physical volumes not changed
  WARNING: Activation disabled. No device-mapper interaction will be attempted.
  Volume group "insidevgname" successfully changed
  /dev/myvm-vg: already exists in filesystem
  New volume group name "myvm-vg" is invalid
Fatal: Unable to rename insidevgname to myvm-vg, error: 5

এই মুহুর্তে, আমি যদি স্ন্যাপশটটি ধ্বংস করতে চাইতাম তবে https://bugs.launchpad.net/ubuntu/+source/lvm2/+bug/1088081udev এ বর্ণিত বাগের কারণে আমি প্রথমে অস্থায়ীভাবে অক্ষম করতে হয়েছিল

তারপরেও, নেস্টেড এলভিএম এর ভলিউম গ্রুপটি আপাতদৃষ্টিতে সাফল্যের সাথে নিষ্ক্রিয় করার পরে, নেস্টেড পিভি-র দ্বারা নির্মিত পার্টিশন ম্যাপিং kpartx, কোনওভাবে ব্যবহারে রইল।

কৌশলটি মনে হয়েছিল যে ডিভাইস ম্যাপারটি গাছের তালিকায় এই জাতীয় পুরানো ভলিউম গোষ্ঠীর নাম ব্যবহার করে একটি অতিরিক্ত পিতামাতার ম্যাপিং রেখেছিল:

insidevgname-lvroot (252:44)
 └─outsidevgname-myvm--root-p2 (252:43)
    └─outsidevgname-myvm--root (252:36)

সমাধানটি কেবল সেই নির্দিষ্ট ম্যাপিংয়ের সাহায্যে অপসারণ করা হয়েছিল dmsetup remove insidevgname-lvroot। এর পরে, kpartx -dএবং ভাল lvremoveকাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.