পাইথনটি ব্যবহার করার কথা সেখানে ভলিউম মাউন্ট করা হয়েছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?


10

পাইথনে লিখিত একটি ব্যাকআপ স্ক্রিপ্ট পেয়েছি যা উত্স ডিরেক্টরিটি অনুলিপি করার আগে গন্তব্য ডিরেক্টরি তৈরি করে। আমি এটিকে /external-backupগন্তব্য হিসাবে ব্যবহারের জন্য কনফিগার করেছি , যেখানে আমি একটি বাহ্যিক হার্ড ড্রাইভ মাউন্ট করি। হার্ড ড্রাইভ চালু না হওয়া (বা মাউন্ট করা) ছাড়াই আমি কেবল স্ক্রিপ্টটি চালিয়েছি এবং দেখতে পেলাম যে এটি অভ্যন্তরীণ হার্ড ড্রাইভে ব্যাকআপ তৈরি করার পরেও স্বাভাবিক হিসাবে কাজ করছে, যার নিজের জায়গা ব্যাকআপ করার মতো যথেষ্ট জায়গা নেই near

আমার প্রশ্ন: ভলিউমটি লেখার আগে সঠিক জায়গায় মাউন্ট করা হয়েছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি? যদি আমি সনাক্ত করতে পারি যে /external-backupএটি মাউন্ট করা হয়নি, তবে আমি এটিতে লেখা আটকাতে পারি।

বোনাস প্রশ্নটি হ'ল কেন এটি অনুমোদিত হয়েছিল, যখন ওএস জানে যে ডিরেক্টরিটি অন্য ডিভাইসে বাস করার কথা, এবং ডেটা (অভ্যন্তরীণ হার্ড ড্রাইভে) এর পরে কী ঘটবে আমি সেই ডিভাইসটি (বাহ্যিক হার্ড ড্রাইভ) মাউন্ট করব? স্পষ্টতই একই পথে দুটি ডিভাইসে দুটি অনুলিপি থাকতে পারে না!

আগাম ধন্যবাদ!

উত্তর:


23

আমি একবার তাকান os.path.ismount()


1
একমাত্র সমস্যা হ'ল এটি একটি বুলিয়ান দেয় এবং সঠিক ডিভাইসটি আছে কিনা তা নির্দিষ্ট করে না।
ম্যাকজেফ 18'10

3
@McJeff: তা সত্য তা জানাও নেই যা বলা হয়েছে যে সব যদি । যদি কোনও ডিভাইস না থাকে তবে এটি মিথ্যা প্রত্যাবর্তন করবে এবং সেই পথে একটি লিখন প্যারেন্ট ফাইল সিস্টেমের অন্তর্নিহিত ডিরেক্টরিতে লিখবে । সুতরাং যদি এটি মিথ্যা ফেরত দেয় তবে একটি ত্রুটি জারি করুন এবং সেখানে লিখবেন না। ডিরেক্টরিটি /external-backupকোনও বাহ্যিক ডিভাইসে বাস করে না, এটি প্যারেন্ট ফাইল সিস্টেমে থাকে। সিস্টেম কেবল mountএটি কী বলে তা জানে , সেখানে কী হওয়া উচিত তার কোনও ধারণা নেই। ইউনিক্স ফাইল সিস্টেমে "মাউন্ট পয়েন্ট" সম্পর্কে বিশেষ কিছুই নেই। এটি কেবল একটি নিয়মিত ডিরেক্টরি।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

কাজটি নিখুঁতভাবে করে। আমি সেখানে অন্যান্য ভলিউম মাউন্ট করা থেকে রক্ষা করতে যাচ্ছি না, কেবল এটি প্যারেন্ট ফাইল সিস্টেম নয়। অন্যান্য উত্তরদাতাদের জন্য দুঃখিত, আপনার উত্তরগুলি আমার প্রশ্নের উত্তরটি আরও সঠিকভাবে দিতে পারে তবে আমি ভয় করি যে আপনি প্রথমে কী জিজ্ঞাসা করতে পারবেন তা আমি যথেষ্ট জানতাম না;) যাইহোক আমি আপনাকে সমস্ত রেট দিয়েছি ।
বেন হ্যামার্স

ভাল ব্যাখ্যা!
ম্যাকজেফ

5

কোনও কিছুর সুনির্দিষ্ট উত্তরের জন্য কেবল কার্নেল নিশ্চিতভাবে জানে, কার্নেলটি জিজ্ঞাসা করুন:

cat /proc/mounts

আপনার পছন্দ মতো যে কোনও সরঞ্জাম ব্যবহার করে সেই ফাইলটি পড়তে / পার্স করা যেতে পারে যেন এটি কোনও সাধারণ ফাইল। পাইথন সহ কুইক-এন-নোংরা উদাহরণ:

#!/usr/bin/python

d = {}

for l in file('/proc/mounts'):
    if l[0] == '/':
        l = l.split()
        d[l[0]] = l[1]

import pprint

pprint.pprint(d)

4

চেক করার সহজতম উপায় হ'ল এর mountমাধ্যমে প্রার্থনা করা subprocessএবং এটি সেখানে প্রদর্শিত হয় কিনা তা দেখুন। অতিরিক্ত credit os.readlink()ণের জন্য /dev/disk/by-*, এটি কোন ডিভাইস তা নির্ধারণের জন্য সামগ্রীগুলির ব্যবহার করুন ।


যেহেতু আমি দেখতে পাচ্ছি যে পদ্ধতির সাথে সমস্যাটি হ'ল আউটপুটটি mountopালুভাবে সংজ্ঞায়িত করা হয়। কি mountযদি আমি মাউন্ট আছে আউটপুট /dev/evil device on tour/directory on which I mount devices? আউটপুটটির বিশ্লেষণ এই জাতীয় ক্ষেত্রে অবিশ্বাস্য হতে পারে ...
২২

2

বোনাস উত্তর। যদি বাহ্যিক ডিভাইস মাউন্ট না করা হয় তবে ডেটাটি পথে পথে রুট বিভাজনে লেখা হয় /external-backup। যদি বাহ্যিক ডিভাইসগুলি মাউন্ট করা হয় তবে রুট পার্টিশনের ডেটা এখনও আছে তবে এটি পৌঁছনীয় নয় কারণ /external-backupএখন বাহ্যিক ডিভাইসের দিকে ইশারা করা হচ্ছে।


2

পুরানো প্রশ্ন, তবে আমি ভেবেছিলাম যে আমি যাই হোক না কেন আমার সমাধানটি ( ডেনিস উইলিয়ামসনের এবং Ignacio ভাস্কেজ-আব্রামের জবাবের ভিত্তিতে) অবদান রাখব । যেহেতু আমি এটি একটি লিনাক্স নন পরিবেশে ব্যবহার করছি যেগুলি দূরবর্তী ডিরেক্টরিগুলি মাউন্ট হচ্ছে তা পরীক্ষা করতে, / proc এবং mtab ব্যবহার করা যাবে না এবং কোনও অতিরিক্ত চেক প্রয়োগ করা হয়নি:

def is_mounted(special, directory):
    search_prefix = '{} on {}'.format(special, directory.rstrip('/'))

    if os.path.ismount(directory):
        mounts = subprocess.check_output(['mount']).split('\n')

        for line in mounts:
            if line[:len(search_prefix)] == search_prefix:
                return True;

    return False

উন্নতি স্বাগত!


1

/ Etc / mtab ফাইলটি বর্তমানে কী রয়েছে তা আপনাকে জানাতে উপস্থিত রয়েছে exists একটি getmntentকল আছে, তবে আমি মনে করি না এটি osমডিউলে রফতানি হয়েছে । দ্রুত এবং নোংরা? খুলুন / ইত্যাদি / এমটিএবি এবং বিভক্ত। আপনার ডিভাইস 0 কলামে উপস্থিত রয়েছে এবং কলাম 1-এ গন্তব্যস্থল মাউন্ট পয়েন্টটি সঠিক কিনা তা নিশ্চিত করুন।

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