আমি লিনাক্সে কোনও ফাইলের ডেটা ব্লককে কীভাবে তালিকাবদ্ধ করব?


13

আমি এটি বুঝতে পেরেছি, ইউনিক্সের মতো অপারেটিং সিস্টেমের প্রতিটি ফাইলের একটি ইনোড নম্বর থাকে (যা "ls -i" দিয়ে দেখা যায়) এবং প্রতিটি ইনোড ডিস্ক ব্লকের একটি তালিকা যা কোনও ফাইলের আসল ডেটা ধারণ করে।

লিনাক্সের কোন কমান্ড আছে যা ফাইল ফাইলের নামটিকে তার আর্গুমেন্ট হিসাবে গ্রহণ করে এবং সেই ফাইলের ইনোডটি নির্দেশ করে যে ডিস্ক ব্লকগুলির তালিকা মুদ্রণ করে?

PS- এর ফাইল সিস্টেমটি ext3।

উত্তর:


17

কমান্ড লাইন বা ইন্ট্রাকটিভলে ফাইল তথ্য দেখতে আপনি "ডিবাগফস" সরঞ্জামটি ব্যবহার করতে পারেন। হয় ব্যবহার:

# debugfs /dev/<spartition>
# stat /path/to/file

অথবা

# debugfs -R "stat /path/to/file" /dev/<partition>

উদাহরণ স্বরূপ:

# debugfs -R "stat /etc/passwd"  /dev/sda5
Inode: 435914   Type: regular    Mode:  0644   Flags: 0x0
Generation: 979004472    Version: 0x00000000
User:     0   Group:     0   Size: 1577
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x4a2d6f78 -- Mon Jun  8 23:07:20 2009
atime: 0x4a2d6f79 -- Mon Jun  8 23:07:21 2009
mtime: 0x4a2d6f78 -- Mon Jun  8 23:07:20 2009
Size of extra inode fields: 4
BLOCKS:
(0):1767438
TOTAL: 1

নোট করুন যে 'স্ট্যাটাস' এর জন্য আর্গুমেন্ট সর্বদা / পথ / থেকে / ফাইল নয়। / পাথ / টু / ফাইল ব্যবহার করা রুট ফাইল সিস্টেমে ফাইলের জন্য কাজ করে (মাউন্ট করা /) তবে অন্য ফাইল সিস্টেমে মাউন্ট করা পাথের জন্য নয়। এই ক্ষেত্রে একটি ত্রুটি বার্তা পেতে পারে File not found by ext2_lookup। সুতরাং স্টেটের যুক্তির জন্য ইনোড নোটেশনটি ব্যবহার করা ভাল। ls -iকোনও ফাইলের ইনোড নম্বর পেতে ব্যবহার করুন, তারপরে / </> / ফাইলের পরিবর্তে '<>' এ নম্বরটি দিয়ে ডিবাগগুলি অনুরোধ করুন। উদাহরণস্বরূপ:# debugfs -R "stat <1234567>" /dev/sda2
এলাজারআর

@ এলাজারআর আপনি কি এই মন্তব্যটি ব্যাখ্যা করতে পারেন? কেন path/to/fileসব ক্ষেত্রে কাজ করা উচিত ? আমার কাছে বিভ্রান্তিকর বিষয়টি হ'ল debugfs ..... /dev/fs_blockdevআমার বোধগম্যতার মাধ্যমে কেবল কখনও একটি ফাইল সিস্টেম বিবেচনা করা যায় এবং এই সিস্টেমের অভ্যন্তরে থাকা সমস্ত ফাইলই তাদের পথে বা থাইর ইনোডের মাধ্যমে অ্যাক্সেস করা যায়, আপনি কী প্রকাশ করতে চান?
humanityANDpeace

@humanityANDpeace, যে ক্ষেত্রে কোনও ফাইল কোনও পার্টিশনে (ফাইল সিস্টেম) থাকে যা মূল ফাইল সিস্টেমের বাইরে থাকে, যেমন রুট পার্টিশনের অধীনে কিছু মাউন্ট পয়েন্টে মাউন্ট করা হয়, ext2_lookup অপারেশন প্রদত্ত ডিভাইসের নীচে প্রদত্ত পাথটি আবিষ্কার করতে ব্যর্থ বলে মনে হচ্ছে (পার্টিশন)। আমি উল্লিখিত ত্রুটি এই ফলাফল। উদাহরণস্বরূপ, যদি আপনার / হোম ফোল্ডারগুলি / ফাইল / এসডিএ থেকে মূল ফাইল সিস্টেমের উপরে মাউন্ট করা থাকে (যা অন্য পার্টিশনের উপর রয়েছে, যেমন, / dev / sda3), তারপরে debugfs -R "stat /home/myuser/foo.txt" /dev/sda5একটি ত্রুটির ফলস্বরূপ। তবে debugfs -R "stat /path/on/rootfs" /dev/sda3কাজ চালাচ্ছে ।
এলাজারআর

আমি মনে করি আপনার প্রয়োজন sudo, অন্যথায় কিছু অসহায় বার্তা প্রদর্শিত হবে।
কেদার মহস্বাদ

এবং কনভার্স প্রশ্ন: কোন ফাইল প্রদত্ত ব্লক ব্যবহার করে তা আমরা কীভাবে আবিষ্কার করতে পারি?
লুইস এ। ফ্লোরিট

4

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


4

ব্লকের তালিকা পাওয়ার জন্য একটি সহজ উপায় ( debugfsউত্তরগুলির মতো পার্টিশন থেকে না পড়ে ) FIBMAPআইওএসটিএল ব্যবহার করা । আমি এটি করার কোনও আদেশ জানি না, তবে এটি একটি লিখতে খুব সহজ; একটি দ্রুত গুগল অনুসন্ধান আমাকে FIBMAP ব্যবহারের একটি উদাহরণ দিয়েছে , যা আপনি যা চান ঠিক তেমন করে। একটি সুবিধা হ'ল এটি যে কোনও ফাইল সিস্টেমে কাজ করবে যা bmapকেবল এক্সট3 নয়, অপারেশন সমর্থন করে ।

একটি নতুন (এবং আরও দক্ষ) বিকল্প হ'ল FIEMAPআইওএসটিএল, যা এক্সটেন্টস সম্পর্কে বিস্তারিত তথ্যও (এক্সটোর 4 জন্য দরকারী) ফিরিয়ে দিতে পারে।


3
hdparm --fibmap /path/to/filename

আমি zfs এ কাজ করব না, তবে ext4, btrfs, (v) ফ্যাট ইত্যাদিতে করব

man 8 hdparm :

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


1

কমপক্ষে কিছু লিনাক্স মেশিনে ... "ls -s" হয়ত আপনি যা সন্ধান করছেন তা সরবরাহ করতে পারে।

সম্পাদনা: আমার খারাপ, আমি দেখতে পাচ্ছি যে আপনি নিজেরাই ব্লকের একটি তালিকা অনুসন্ধান করছেন, সেগুলির কোনও গণনা নয়।


-s ব্লকগুলিতে ফাইলের আকার দেখায় - আমি ব্লক সংখ্যার একটি আসল তালিকা চাই।
মাইকে

-2

e2fsck -b 32768 / dev / hda1 আমার মনে হয় আপনি এটি চেষ্টা করে দেখতে পারেন বা যদি আপনি একই ডকেক্সটি দেখতে চান তবে আপনি নিম্নলিখিতটি পরীক্ষা করতে পারেন

http://www.linux-tutorial.info/modules.php?name=MContent&pageid=97


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