সিপি / আরএসএনসি-র সাথে বর্ধিত বৈশিষ্ট্য সংরক্ষণ করা


12

অনুলিপি করার সময় cp, বর্ধিত বৈশিষ্ট্যগুলি এমনকি স্পষ্ট করেও সংরক্ষণ করা হয় না

cp -a --preserve=all /source /dest

অথবা

cp -a --preserve=xattr /source /dest

একই সঙ্গে rsync, অর্থাত্

rsync -aq -A -X --delete /source /dest

যাইহোক, গন্তব্য ফাইল সিস্টেমে, আমি ম্যানুয়ালি (এর সাথে chattr) বর্ধিত বৈশিষ্ট্য তৈরি করতে পারি । এর অর্থ টার্গেট ফাইল সিস্টেমটি xattr সমর্থন করে supports

আমি সংরক্ষণ করতে পারছি না কেন xattrসঙ্গে cpবা rsync?

অতিরিক্ত তথ্য:

  • উত্স এবং টার্গেট ফাইল সিস্টেম উভয়ই ext4
  • উত্স এবং লক্ষ্য ফাইল সিস্টেম উভয়ই স্থানীয় (এনএফএস নয়)
  • আমি ডেবিয়ান হুইজি ব্যবহার করছি

আপনি এই গন্তব্য ফাইল সিস্টেমটি কীভাবে মাউন্ট করছেন? এটি কি এনএফএসের ওপরে?
slm

গন্তব্য ফাইল সিস্টেমটি একটি স্থানীয় ফাইল সিস্টেম
মার্টিন ভেজিটার

আপনি কি mountএই ফাইল সিস্টেমের জন্য আউটপুট প্রদর্শন করতে পারেন ?
slm

1
কোন ইউনিক্স বৈকল্পিক এবং সংস্করণে? উভয় প্রান্তে কোন ফাইল সিস্টেমের প্রকারগুলি, কোন মাউন্ট বিকল্পগুলির সাথে?
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন' 19

1
@ মার্টিনভেগটার আপনি কি আপনার ফাইলের একটি নমুনা বৈশিষ্ট্য দিতে পারবেন? আমি মাত্র দুটি ফাইলে ext4 ফাইল সিস্টেম তৈরি করেছি এবং এর সাথে একটি পরীক্ষাও করেছি setfattr -n system.name0 -v "value" test_file। আমি test_fileext4 / jfs / xfs এর সাথে / এ অনুলিপি করেছি cp --preserve=allএবং বর্ধিত বৈশিষ্ট্য সংরক্ষণে কোনও সমস্যা নেই।
ইউভিভি

উত্তর:


14

হালনাগাদ

এটির সাথে আরও কিছুটা গোলমাল করার পরে এবং কোডটির জন্য chattrএবং অন্যান্যটি দেখার পরে e2fsprogs, এটি স্পষ্ট হয় যে নির্ধারিত বৈশিষ্ট্যগুলি chattrএবং সেটগুলি libattr(যেমন কমান্ড সহ setfattr) দ্বারা নির্ধারিত বৈশিষ্ট্যগুলি খুব আলাদা। ফাইল সিস্টেম ফ্ল্যাগ chattrসেট করে extযা কেবল কোনও নামযুক্ত বৈশিষ্ট্য বা নেমস্পেসে ম্যাপ করে না। কোনটি তাদের কোনো কলের মাধ্যমে দেখা libattr'র listxattr। তাদের সম্ভবত নীচের অনুমান হিসাবে নেমস্পেসে নামযুক্ত বৈশিষ্ট্যগুলির মানচিত্র করা উচিতsystem , তবে এখনও এটি সম্পূর্ণরূপে বাস্তবায়নযোগ্য নয়। এছাড়াও system.posix_acl_accessনীচের এই বৈশিষ্ট্যগুলির মধ্যে একটিতে ম্যাপিংয়ের জন্য আমি যে বৈশিষ্ট্যটি ভুল করেছিলাম তা extফাইল সিস্টেমের পতাকাগুলির সাথে কোনও সম্পর্কযুক্ত নয় এবং এটি অ্যাক্সেস নিয়ন্ত্রণ তালিকাগুলির সাথে করণীয়। সম্পর্কিতstraceকোনও ফাইলের জন্য বার্তা উপস্থিত হয় এবং কেবল যখন cp --preserve=xattrব্যবহৃত হয় তখন অদৃশ্য হয়ে যায় ।

দেখে মনে হয় যে নির্ধারিত বৈশিষ্ট্যগুলি ফাইল সিস্টেমের chattrজন্য নির্দিষ্ট এবং extএটিগুলিকে প্রভাবিত করার একমাত্র উপায় হল e2fsprogsসরঞ্জামগুলির মাধ্যমে । আসলে manপৃষ্ঠাটি তাদের জন্য 'বর্ধিত বৈশিষ্ট্য' শব্দটি ব্যবহার করে না, বরং 'ফাইল বৈশিষ্ট্য' ব্যবহার করে। 'রিয়েল' বর্ধিত বৈশিষ্ট্য হ'ল নাম / মান জোড়া যা পরিবর্তিত হতে পারে libattrএবং একাধিক ফাইল সিস্টেমে প্রয়োগ করা হয়। এগুলো কি cpএবং rsyncচেহারার জন্য এবং কপি করা ফাইল উপর স্থানান্তর যখন ডান অপশন দেওয়া হয়। তবে এটি মনে হয় যে systemনামের স্থানের chattrবৈশিষ্ট্যগুলি এবং অন্যান্য ফাইল সিস্টেমে সমতুল্য বৈশিষ্ট্যগুলির মানচিত্রের জন্য নেমস্পেস বিদ্যমান exists তবে আপাতত এটি কাজ করে না।

সেখানে কিছু ভাল তথ্য আছে বলে আমি আসল উত্তরটি অক্ষত রেখেছি, যদিও এটি পয়েন্টে বেশ ভুল হয়ে যায়।

আপডেট 2

আমার এখন আগে এই ফিরে আসা উচিত ছিল, কিন্তু এই উত্তর হিসাবে , chattrকেবল extফাইল সিস্টেমের চেয়ে বেশি কাজ করে । উইকিপিডিয়া অনুসারে , এটি chflagsবিএসডি ভিত্তিক সিস্টেমের কমান্ডের সমতুল্য ।

আমি কয়েকটি ফাইল সিস্টেমে এই বৈশিষ্ট্যগুলির সেটিং এবং পঠন পরীক্ষা করার জন্য একটি স্ক্রিপ্ট লিখেছি এবং নিম্নলিখিত ফলাফল পেয়েছি:

ext4:
suS-iadAcj-t-e-- mnt/test_file
suSDiadAcj-tTe-- mnt/test_dir

reiserfs:
lsattr: Inappropriate ioctl for device While reading flags on mnt/test_file
lsattr: Inappropriate ioctl for device While reading flags on mnt/test_dir

xfs:
--S-iadA-------- mnt/test_file
--S-iadA-------- mnt/test_dir

btrfs:
--S-iadAc------C mnt/test_file
--SDiadAc------C mnt/test_dir

দ্রষ্টব্য যে reiserfsউইকিপিডিয়ায় কিছু কার্যকারিতা হিসাবে তালিকাবদ্ধ থাকা সত্ত্বেও ফাইলের পতাকা পড়ার / সেট করার সমস্ত প্রচেষ্টা উপরের ত্রুটিটি দিয়েছে gave আমি পরীক্ষা করিনি reiser4। এছাড়াও cপতাকাটি ext4লাগাতে পারলে সম্মান হয় না। এই ফ্ল্যাগগুলি প্রভাবিত করে এমন টিউনিং / মাউন্ট বিকল্পগুলিও থাকতে পারে তবে আমি কোনও খুঁজে পেলাম না।

তবে এটি মনে হয় যে বর্তমানে chattrএই বৈশিষ্ট্যগুলিকে সংশোধন করতে সক্ষম লিনাক্সের একমাত্র ইউটিলিটি এবং তাই কোনও অনুলিপি ইউটিলিটি সেগুলি সংরক্ষণে সক্ষম নয়।

আসল উত্তর

কারণ rsyncমনে হচ্ছে যে এমনকি চেষ্টা করে না। থেকে -Xবিভাগে rsyncডকুমেন্টেশন:

For systems that support extended-attribute namespaces, a copy being done by a
super-user copies all namespaces except system.*.  A normal user only  copies
the user.* namespace.

এটা তোলে অ্যাট্রিবিউট দ্বারা ব্যবহৃত অক্ষর মানচিত্র করা কঠিন chattrএবং lsattrঅন্তর্নিহিত নামে ফাইলসিস্টেম ব্যবহৃত বৈশিষ্ট্যাবলী (ওয়ান সেখানে ইন্টারনেটে কোন তালিকা)। যদিও আমার পরীক্ষাগুলি থেকে, Aঅ্যাট্রিবিউটকে অ্যাট্রিবিউট মানচিত্রগুলি system.posix_acl_accessএবং যেহেতু এটি systemনামস্থান, তাই rsyncএটি অনুলিপি করার চেষ্টাও করবে না।manস্নিপেটে উল্লিখিত অন্য দুটি নেমস্পেসগুলি হ'ল trustedএবং securityএগুলি নির্ধারণের জন্য মূল সুযোগগুলি প্রয়োজন (এবং rsyncএটি ছাড়া চেষ্টা করবে না)।

সম্ভবত আপনি যে বৈশিষ্ট্যগুলি সেট করার চেষ্টা করেছেন সেগুলি systemনেমস্পেসে পড়ে যা যা rsyncউপেক্ষা করে (এবং সম্ভবত বুদ্ধিমানের সাথে)। হয় বা না হয় আপনি পেতে মূল হতে হবে।

হিসাবে cp, খেলতে বাগ আছে বলে মনে হচ্ছে।চলমান straceউপর cp -a, আমি নিম্নলিখিত দুটি আকর্ষণীয় লাইন পাবেন:

fgetxattr(3, "system.posix_acl_access", 0x7fff5181c0e0, 132) = -1 ENODATA (No data available)

এবং

fsetxattr(4, "system.posix_acl_access", "\x02\x00\x00\x00\x01\x00\x06\x00\xff\xff\xff\xff\x04\x00\x04\x00\xff\xff\xff\xff \x00\x04\x00\xff\xff\xff\xff", 28, 0) = 0

প্রথমত fgetxattrকলটি কোনও ডেটা ফেরত দেয় না (সম্ভবত কোনও কারণ নেই - বৈশিষ্ট্যের অস্তিত্বই যথেষ্ট), তবুও cpগন্তব্য ফাইলে অ্যাট্রিবিউটের মান হিসাবে সেট করতে 28 বাইট (জাঙ্ক?) ডেটা খুঁজে পাওয়া যায়। এটি একটি বাগ-এর মতো মনে হয় cp, তবে সমস্যাগুলি কী ঘটছে libattrতা fsetattrকলটি 0আসলে এট্রিবিউটটি সেট না করেই সাফল্যের জন্য কল হিসাবে ফিরে আসে বলে মনে হয় ।

আমি ext4মাউন্ট করবো কিনা তা বিবেচনা না করেই আমি এই আচরণটি পাই user_xattr। 'কিছু সিস্টেমে' কাজ করার জন্য বর্ধিত বৈশিষ্ট্যের জন্য এই মাউন্ট বিকল্পের প্রয়োজন ছাড়া এটি অন্য কোনও ডকুমেন্টেশন পাচ্ছি না। আপাতদৃষ্টিতে আমার (ডেবিয়ান জেসি) তা হয় না। এমন কি একটি মাউন্ট ইস্যু রয়েছে যা আমি মিস করেছি, এটি ভুল fsetattrএবং এভাবে cpনীরবে ব্যর্থ হওয়া।

বাস্তবিক user_xattrউপর প্রয়োজন হয় ext2, ext3, reiserfsএবং সম্ভবত কিছু অন্যদের। এটির জন্য প্রয়োজনীয় নয়ext4

এছাড়াও লক্ষ করুন যে attrসরঞ্জামগুলি setfattr, getfattrএবং attr(দ্বিতীয়টি কেবলমাত্র কেবলমাত্র হিসাবে ডকুমেন্টেড XFS, তবে কেবল অন্যদের মতো কাজ করবে বলে মনে হয় ext4) userনামস্থান ব্যতীত অন্য কোনও ক্ষেত্রে সমস্যা আছে । আমি পেতে Operation not supportedযদি আমি ব্যবহার করার চেষ্টা setfattrএকটি অ্যাট্রিবিউট করা systemনামস্থান (বা এই অনুযায়ী কোন নামস্থান বাগ )। নাম এবং জায়গাগুলিতে setfattrসফল বলে মনে হয় তবে এরপরে আর কিছু পড়তে ব্যর্থ হয় এবং সেট করা নামস্থান থেকে কিছু পড়তে ব্যর্থ হয় । সফল হওয়ার কারণটি হ'ল এটি একটি কল ব্যবহার করে এবং না ।trustedsecuritygetfattrsystemchattrchattrioctllibattr

যা পুরোপুরি কাজ করে তা হ'ল নামস্পেসে বর্ধিত বৈশিষ্ট্য নির্ধারণ userকরা setfattrএবং তাদের সাথে অক্ষত ব্যবহার করা rsyncবা cpঅনুলিপি করা ( cpএট্রিবিউট তৈরি করার সময় আপনি কোনও মান নির্দিষ্ট না করলেও কোনও সমস্যা নেই )। আমি মনে করি নীচের অংশটি হ'ল systemনেমস্পেস মানগুলি বর্তমানে ব্যবহার করাবগি এবং / বাঅসমর্থিত, কমপক্ষে ডেবিয়ান এবং সম্ভবত অন্যান্য ডিস্ট্রোসেও। সম্ভবত rsyncবিকাশকারীরা এটি জানেন, যে কারণে তারা তাদের উপেক্ষা করেন।

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