আপনি যখন কোনও ফাইল সংরক্ষণ করেন তখন মেটাডেটা কোথায় যায়?


28

বলুন জনি একটি EMPTY ফাইল তৈরি করে। একে বলা হয় foobar.py। জনি যখন এটি কার্যকর করার অনুমতি দেয়, তখন তিনি চালান chmod 755 foobar.py। ফাইলটির এখন মেটাডেটা রয়েছে

-rw-r--r-- 1 johnny staff    0 Dec 27 22:53 foobar.py

Met ফাইলটিতে সেই সমস্ত মেটাডেটা কোথায় রয়েছে? ফাইলটির আকার 0, সুতরাং অন্য ড্রাইভে স্থানান্তরিত হওয়ার পরে এটি মেটাটাটা কীভাবে রাখবে?


1
আমি কোনও বিশেষজ্ঞ নই তবে আমার সাধারণ উত্তরটি অনুমান করা হয় যে আপনার যখন হার্ড ডিস্ক থাকে এবং আপনি 1+ পার্টিশন তৈরি করেন, তারপরে আপনি একটি ফাইল সিস্টেমের সাথে পার্টিশনটি ফর্ম্যাট করেন, যেমন উইন্ডোগুলি এনটিএফএস ব্যবহার করে এবং লিনাক্স এক্স 2 ব্যবহার করতে পারে, তারপরে এই পার্টিশনের বেশিরভাগ অংশ ফাইল সামগ্রীগুলির জন্য, তবে এর কিছুটা অল্প পরিমাণ মেটাডেটা সহ অন্যান্য স্টাফের জন্য সংরক্ষিত।
বার্লপ

@ বারলপ মূলত সঠিক। উভয় সিস্টেমই যেখানে ফাইলগুলি সংরক্ষণ করা হয় সেখানে রেকর্ডিংয়ের জন্য কিছু জায়গা ব্যবহার করে; এনটিএফএসে "মাস্টার ফাইল টেবিল" মেটাডেটা সঞ্চয় করে, ext2 + এ এটি "আইওনডে" থাকে।
pjc50

@ pjc50 ধন্যবাদ এবং মেটাডাটা একপাশে, পার্টিশনের বাইরে যা আছে তার নাম কী? আমি মনে করি এটি নির্ভর করে জিনিসটি এমবিআর বা জিপিটি কিনা .. এমবিআরতে জিনিসটিকে এমবিআর বলা হয় .. এটি জিপিটিতে কী বলা হয়? (আমি বুঝতে পারি জিপিটির একটি উত্তরাধিকারী এমবিআর রয়েছে তবে সমস্ত পার্টিশনের বাইরেও কী এটির নিজস্ব জিনিস আছে?)
বার্লপ

সম্পর্কিত: (মূলত একই জিনিস, তবে প্রশ্নটি বিশেষত উইন্ডোজ সম্পর্কে) উইন্ডোজে ফাইল মেটাডেটা কীভাবে সংরক্ষণ করা হয়?
গ্রোনস্টাজ

2
"chmod 755 ... ফাইলটিতে এখন ... -rw-r - r-- ... এর মেটাডেটা রয়েছে" - আপনার অর্থ -rwxr-xr-x।
জো

উত্তর:


42

এটি সঞ্চয় করা না যে ফাইল। এটি ফাইল সিস্টেমে সঞ্চিত রয়েছে এবং সমস্ত পরামিতি ম্যানুয়ালি একে একে অনুলিপি করা হয় (যদিও কিছু কিছু অনুলিপি করা যায় না)।

এটি হ'ল, বেশিরভাগ অপারেটিং সিস্টেমে "মেটাডাটা সহ কপি ফাইল" কলটি নেই। ফাইল-অনুলিপি প্রোগ্রামটি কেবল নতুন নামের একটি নতুন ফাইল তৈরি করে foobar.py, পুরো 0 বাইটের ডেটা অনুলিপি করে, তার পরিবর্তনের সময়টিকে আসলটির মতো দেখতে একইরূপে ইউটাইম () বা সেটফাইলটাইম () ব্যবহার করে। তেমনিভাবে, ফাইল অনুমতিগুলি chmod () ব্যবহার করে নতুন করে সেট করে বা পসিক্স এসিএল বৈশিষ্ট্যটি অনুলিপি করে "অনুলিপি করা হবে"।

কিছু মেটাডেটা অনুলিপি করা হয়নি। মালিকানা নির্ধারণের জন্য মূল সুবিধার দরকার হয়, সুতরাং অন্য কারও ফাইলের অনুলিপি আপনার নিজস্ব এবং আপনার ডিস্ক কোটা দখল করে । সিটিটাইম (অ্যাট্রিবিউট চেঞ্জের সময়) ইউনিক্সে ম্যানুয়ালি সেট করা অসম্ভব; বিটাইম (জন্ম / সৃষ্টির সময়) সাধারণত কপি করা হয় না।

তুলনা করুন cp -a foo bar(যা মেটাডেটা অনুলিপি করে) এবং cp foo bar(যা না):

ce স্ট্রেস-ভি সিপি ফু বার
...
খোলা ("foo", O_RDONLY) = 3
খোলা ("বার", O_WRONLY | O_TRUNC) = 4
পড়ুন (3, "পরীক্ষা \ n", 131072) = 5
লিখুন (4, "পরীক্ষা \ n", 5) = 5
পড়ুন (3, "", 131072) = 0
বন্ধ (4) = 0
বন্ধ (3) = 0
...
$ স্ট্রেস-ভি সিপি -এ ফু বার
...
 - মূল মেটাডেটা পুনরুদ্ধার করা হয়েছে
lstat ("foo", {স্ট_দেব = মেকেদেভ (254, 0), st_ino = 60569468, st_mode = S_IFREG | 0644,
             st_nlink = 1, st_uid = 1000, st_gid = 1000, st_blksize = 4096, st_blocks = 8,
             st_size = 5, st_atime = 2016-12-28T09: 16: 59 + 0200.879714332,
             st_mtime = 2016-12-28T09: 16: 55 + + 0200.816363098,
             st_ctime = 2016-12-28T09: 16: 55 + 0200.816363098 =) = 0
 - তথ্য অনুলিপি করা হয়
খোলা ("foo", O_RDONLY | O_NOFOLLOW) = 3
খোলা ("বার", O_WRONLY | O_TRUNC) = 4
পড়ুন (3, "পরীক্ষা \ n", 131072) = 5
লিখুন (4, "পরীক্ষা \ n", 5) = 5
পড়ুন (3, "", 131072) = 0
 - সংশোধন সময় অনুলিপি করা হয়
utimensat (4, NULL, [{TV_sec = 1482909419, TV_nsec = 879714332},
                    {টিভি_সেক = 1482909415, টিভি_এনসি = 816363098}], 0) = 0
 - মালিকানা অনুলিপি করা হয়েছে (কেবলমাত্র 'সুডো [স্ট্রেস] সিপি' দিয়ে)
ফ্যাচাউন (4, 1000, 1000) = 0
 - বর্ধিত বৈশিষ্ট্য অনুলিপি করা হয়েছে (xdg.origin.url ব্রাউজার দ্বারা সেট করা হয়, উইজেট)
flistxattr (3, NULL, 0) = 0
flistxattr (3, "user.xdg.origin.url \ 0", 20) = 20
fgetxattr (3, "user.xdg.origin.url", "https://superuser.com/", 22) = 22
fsetxattr (4, "user.xdg.origin.url", "https://superuser.com/", 22, 0) = 0
 - পসিক্স এসিএল উপস্থিত নেই, সুতরাং st_mode থেকে একটি প্রাথমিক এসিএল তৈরি করা হয়েছে
 - (এই ক্ষেত্রে, একটি সাধারণ fchmod () পাশাপাশি কাজ করবে)
fgetxattr (3, "system.posix_acl_access", 0x7ffc87a50be0, 132) = -1 এনওডাটা (কোনও ডেটা উপলব্ধ নেই)
fsetxattr (4, "system.posix_acl_access", "\ 2 \ 0 \ 0 \ 0 \ 1 \ 0 \ 6 \ 0 \ 377 \ 377 \ 377 \ 377 \ 377 \ 377 \ 0 \ 4 \ 0 \ 377 \ 377 \ 377 \ 377 ", 28, 0) = 0
বন্ধ (4) = 0
বন্ধ (3) = 0
...

3
এই উত্তরটির পরিপূরক করতে আপনার উল্লেখ করা উচিত: - অন্য ড্রাইভে অনুলিপি করার সময়: উত্স থেকে মেটাডেটাটি পড়া হয় এবং অ্যাপোপ্রাইটেট সেটিংস (বা বিকল্পগুলি) (যেমন: তারিখ রাখুন, অধিকার রাখুন, বা এমনকি রাখুন) লক্ষ্য থেকে পুনরুত্পাদন করা হবে " সমস্ত কিছু ") ব্যবহার করা হয়েছিল (যেমন আপনি উল্লেখ করেছেন)। ২) বিকল্পটি হ'ল প্রথমে ফাইলগুলির একটি সংরক্ষণাগার (.zip, .tar, ইত্যাদি) করা এবং লক্ষ্যবস্তুতে এই সংরক্ষণাগার থেকে নিষ্কাশন করা, আবারও প্রোগ্রামটিকে মেটাডেটা সন্ধানের জন্য কিছু জায়গা (সংরক্ষণাগার বিন্যাসে) দেওয়া, এবং নির্দিষ্ট বিকল্প / সেটিংস সেই মেটাডাটাগুলি রাখার (বা না) অনুমতি দেয়।
অলিভিয়ার ডুলাক

দ্বিতীয় অনুচ্ছেদে: স্ট্যাট (2) সম্পর্কে কী?
বিড়াল

আমি যে প্রশ্নটি নিয়ে চিন্তা করেছি তার একটি উত্তর দেওয়ার জন্য ধন্যবাদ।
জুনিয়ররবিস্ট

11

এটি মেটাডেটা সংরক্ষণ করা হয় যেখানে ফাইল সিস্টেম থেকে সাধারণত ফাইল সিস্টেমের থেকে পৃথক হয়। ফাইল সিস্টেমে এক্সট্রা-ফ্যামিলিতে, আপনি উল্লিখিত মেটাডেটা (মালিক, গোষ্ঠী, অনুমতি, সময়) এতে সঞ্চিত থাকে ইনোডে । ইনোড ডিস্কে ফাইল দখল করে এমন ব্লকগুলিও (পয়েন্টারগুলি) সঞ্চয় করে। ইনোড ফাইলের নাম সংরক্ষণ করে না

আপনি statসিস্টেম কল দিয়ে এই ডেটা অ্যাক্সেস করতে পারেন (man 2 stat ) এর এবং statএটি মুদ্রণের জন্য সরঞ্জামটি ব্যবহার করতে পারেন ( man stat)। ইনোড ক্ষেত্রগুলির বিশদ বিবরণ linux/include/linux/fs.hকার্নেলের উত্সে পাওয়া যাবে।

অন্যান্য ধরণের মেটাডেটা রয়েছে (উদাঃ) এসিএল অনুমতি ) যা বিভিন্ন জায়গায় সঞ্চিত থাকে।

আপনি ফাইলটি অনুলিপি করার সময় মেটাডেটা ডিফল্টরূপে অনুলিপি করা হয় না। পরিবর্তে, ডিফল্ট মেটাডেটা মান সহ একটি নতুন ফাইল তৈরি করা হয়। cp( -p, --preserve) এর বিভিন্ন বিকল্প রয়েছে যা cpপুরাতন মেটাডেটাটি সহ statনতুন মেটাটাটা পড়ে এবং তদনুসারে সংশোধন করে মেটাডেটা অনুলিপি করার নির্দেশ দেয় ।


4

ফাইল সিস্টেমের উপর নির্ভর করে অঞ্চলগুলি স্থিতিশীলভাবে বা গতিশীলভাবে মেটাডেটা যেমন অনুমতি, আকার এবং অন্যদের (কখনও কখনও ফাইলের নামও) ধরে রাখার জন্য সংরক্ষণ করা হয়।

ইউনিক্সে, মেটাডেটা ইনোডে সংরক্ষণ করা হয় যেখানে ফাইলটি থাকে সেই স্থানের ক্ষেত্রটি নিয়ন্ত্রণ করে ( যখন ফাইলের নাম এবং সম্পর্কিত ইনোড নম্বর ডিরেক্টরিতে প্রবেশ করে )।

কিছু ফাইল সিস্টেমে ডিরেক্টরিতে এন্ট্রিগুলি হ'ল অন্য ফাইলগুলির মতো, তবে দৃশ্য থেকে লুকানো থাকে। FAT এবং FAT32 হ'ল এই ধরনের ফাইল সিস্টেম (যদিও FAT এর মূল ডিরেক্টরিটি "বিশেষ")। আপনি যখন একটি ফাইল তৈরি করেন, আপনি ফাইলটিতে এমন একটি এন্ট্রি যুক্ত / সম্পাদনা করেন যা ফাইলটি যেখানে থাকে সেই ফোল্ডারটি বর্ণনা করে। প্রতিটি এন্ট্রি ফাইলের আকার, নাম এবং তারিখ এবং অন্য কিছুই সংরক্ষণের জন্য যথেষ্ট বড় (32 টি নাম বর্ধিত দীর্ঘ নাম; 32 বাইটের ডিফল্ট এন্ট্রি আকার পুরানো 8 + 3 অক্ষর বিন্যাসে একক নাম ধারণ করতে পারে this এই সব অবশ্যই , ধরে নিচ্ছি আমার স্মৃতি কাজ করছে)। এক্সট সিস্টেম একই, তবে ডিরেক্টরি এন্ট্রিটি গতিশীল আকারের হয় এবং কেবল নাম এবং ইনোড পয়েন্টার ধারণ করে; অন্যান্য সমস্ত তথ্য ইনোড হয়। এইভাবে, দুটি এন্ট্রি একই ফাইলের দিকে নির্দেশ করতে পারে, যা নকল ফাইল পরিচালনা করতে দরকারী।

কিছু ফাইল সিস্টেমে, মেটাডেটা ছাড়াও অল্প পরিমাণে ডেটা ধরে রাখতে আইওনডগুলি যথেষ্ট পরিমাণে বড় হতে পারে, যাতে ফাইলটি যদি সেখানে ফিট করতে পারে তবে এটি অতিরিক্ত ডিস্কের স্থান দখল করে না। আপনি একটি 45-বাইট ফাইল তৈরি করেন এবং ফ্রি ডিস্কের স্থানটি কোনওভাবেই পরিবর্তিত হয় না; সেই বাইটগুলি ইনোডের ভিতরে সংরক্ষণ করা হয় । আমি মনে করি যে Ext * পরিবার এটি সমর্থন করে (এবং এনটিএফএসও)। এটি বিশাল সংখ্যক খুব ছোট ফাইল পরিচালনা করতে সহায়তা করে।

এখনও অন্য ফাইল সিস্টেমে, প্রধান অতিরিক্ত বরাবর একটি "ফ্যান্টম" ফাইল সিস্টেমের পরিমাণ রয়েছে যা এই অতিরিক্ত বৈশিষ্ট্যগুলি সঞ্চয় করে। কেবল ফাইলের তথ্যই নয়, সম্ভবত আইকনগুলিও ফাইল করুন

কিছু সিস্টেমে উভয়ই থাকে: এনটিএফএসের সম্পূর্ণ ডিরেক্টরি মেটাডেটা ইনোড-জাতীয় ফ্যাশনে কাজ করে এবং আরও তথ্যের অধিকারী বিকল্প ডেটা স্ট্রিম তৈরির সম্ভাবনা যা (মূলত) ফাইলটিতে কোনও পরিবর্তন করে না।


2
ফাইলের নাম ফাইল সহ সংরক্ষণ করা হয় না, তারা ডিরেক্টরি ইনোডের অংশ're এজন্য কঠোর লিঙ্কগুলি কাজ করে
সোব্রিক

এই উত্তরটি যেখানে ফাইল নাম সংরক্ষণ করা হয়েছে সে সম্পর্কে ডির্ক্টের সাথে দ্বন্দ্ব রয়েছে, আমি আশ্চর্য হয়েছি যেটি সঠিক
বিড়াল

দুঃখিত, আমি জিনিসগুলি মিশ্রিত করেছি, এবং @ ডির্কট এর অধিকার রয়েছে । স্থির উত্তর।
এলসার্নি

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