কম্পিউটার টিউটোরিয়াল

অনিশ্চিত নেটওয়ার্কে বড় ফাইল কপি করার জন্য BITS এবং পাওয়ারশেল ব্যবহার

সাধারণত লোকাল এবং গ্লোবাল নেটওয়ার্কে ডিভাইসগুলোর মধ্যে ফাইল ট্রান্সফার SMB, FTP বা HTTP প্রোটোকোল ব্যবহার করে করা হয়। এই সব প্রোটোকলের সমস্যা হল বড় ফাইল ডাউনলোড রিজিউম করতে সমস্যা, যা ধীর বা অনিশ্চিত নেটওয়ার্কে আরও বिगড়ে যায়। আরো,FTP বা HTTP ব্যবহার করে ফাইল কপি করার সময় সার্ভার এবং রিসিপিয়েন্টের মধ্যে উপলব্ধ সকল ব্যান্ডউইথ ব্যবহার হয়, যা নেটওয়ার্ক পারফরম্যান্স এবং অন্যান্য নেটওয়ার্ক অ্যাপ্লিকেশনের অপারেশনে নেতিবাচক প্রভাব ফেলতে পারে (নেটওয়ার্ক ইকুইপমেন্টে সঠিক QoS পলিসি কনফিগার করা সবসময় সম্ভব নয়)। এই আর্টিকেলে আমরা BITS প্রোটোকল এবং পাওয়ারশেল ব্যবহার করে ধীর বা অস্থিতিশীল নেটওয়ার্কে বড় ফাইল কপি করার পদ্ধতি আলোচনা করব।

BITS প্রোটোকল

BITS (Background Intelligent Transfer service) হলো একটি উইন্ডোজ সার্ভিস যা সিস্টেমগুলোর মধ্যে ফাইল ট্রান্সফার করতে ব্যবহৃত হয়। BITS প্রোটোকোল ব্যবহার করে ফাইল ডাউনলোড এবং আপলোড উভয় করা যায়। এই প্রোটোকোল কম্পিউটারগুলো আটোমেটিক উইন্ডোজ আপডেট থেকে ফাইল রিসিভ করার সময় ব্যবহার করে (WSUS সার্ভার থেকে আপডেট ডাউনলোড করার কেসও সহ), SCCM ডিস্ট্রিবিউশন পয়েন্ট থেকে প্রোগ্রাম রিসিভ করার সময় ইত্যাদি।

BITS প্রোটোকলের সুবিধা:

  • BITS একটি ইন্টেলিজেন্ট প্রোটোকোল যা কমিউনিকেশন চ্যানেলের ব্যবহৃত ব্যান্ডউইথ কন্ট্রোল করতে পারে এবং অন্যান্য নেটওয়ার্ক অ্যাপ ও সার্ভিসের অপারেশনে প্রভাব ফেলে না। BITS শুধু ফ্রি (অন্যালোকেটেড) ব্যান্ডউইথ ব্যবহার করতে পারে এবং ট্রান্সফারের সময় ডেটা রেট ডাইনামিক্যালি পরিবর্তন করতে পারে (যদি অন্যান্য অ্যাপ্লিকেশন নেটওয়ার্ক ব্যবহার বাড়ায়, BITS ক্লায়েন্ট নেটওয়ার্ক üzerে ডেটা ট্রান্সফার রেট কমাতে পারে);
  • ফাইল ডাউনলোড ব্যাকগ্রাউন্ড মোডে ব্যবহারকারীর নজরদারি বাইরে চলতে পারে;
  • BITS জব রিজিউম মোডে কম্পিউটার এবং ক্লায়েন্টের মধ্যে কমিউনিকেশন চ্যানেল ব্রেক হলে বা কম্পিউটার রিবুট হওয়া পরেও অটোমেটিক্যালি চালু থাকবে;
  • ডেটা হারিয়ে না গিয়ে BITS ডাউনলোড পজ বা রিজিউম করা যায়; নোট। নেটওয়ার্কে ফাইল কপি রিজিউম করার ক্ষমতা robocopy.exe ইউটিলিটিতেও আছে, যা কানেকশন লост হলে ফাইল ডাউনলোড রিজিউম করতে দেয়।
  • BITS ডাউনলোড জবের প্রায়োরিটি ম্যানেজ করতে দেয়;
  • কম্পিউটারগুলো মাঝপথে ফাইল ট্রান্সফার পোর্ট ৮০ (HTTP) বা ৪৪৩ (HTTPS)-এ হয়, তাই ফায়ারওয়ালে অতিরিক্ত পোর্ট খুলতে হয় না। উদাহরণস্বরূপ পোর্ট ৪৪৫, যা SMB প্রোটোকলে ফাইল কপি করার সময় ব্যবহৃত হয় (পুরনো SMB 1.0 প্রোটোকোলের অনেক ভালনারেবিলিটি আছে সেটি মনে রাখুন);
  • BITS রিসিপিয়েন্ট এবং সার্ভার সাইডে ডিপ্লয়ড IIS সার্ভার আবশ্যক নয়।

অতএব, ধীর এবং অস্থিতিশীল নেটওয়ার্কে (স্যাটেলাইট চ্যানেল, GPRS কানেকশন, ইত্যাদি) বড় ফাইল ট্রান্সফারের জন্য BITS প্রিয় প্রোটোকোল।

BITS: OS এবং পাওয়ারশেল ভার্সন রিকোয়ারমেন্ট

BITS প্রোটোকল উইন্ডোজ XP-এ আসে, যেখানে bitsadmin.exe ইউটিলিটি ব্যবহার করে BITS টাস্ক ম্যানেজ করা যেত। ইউটিলিটি এখনও সাপোর্টেড কিন্তু ডিপ্রিকেটেড। BITS জব ম্যানেজ করার জন্য স্পেশাল পাওয়ারশেল ক্মডলেট ব্যবহার করা প্রিফারেবল।

এই সিনেরিওর জন্য আপনাকে উইন্ডোজ ভিস্তা বা উইন্ডোজ সার্ভার ২০০৮ এবং পাওয়ারশেল ২.০ বা nieuwere OS প্রয়োজন। আধুনিক উইন্ডোজ ১০ এবং উইন্ডোজ সার্ভার ২০১৬/২০১২ R2 ফুলি BITS সাপোর্ট করে।

টিপ। উইন্ডোজ সার্ভার ২০০৩-ও ব্যবহার করা সম্ভব। সেক্ষেত্রে KB 923845 আপডেট এবং পাওয়ারশেল ২.০ ইনস্টল করতে হবে।

BITS সাপোর্ট ক্লায়েন্ট এবং সার্ভার উভয় সাইডে প্রয়োজন।

পাওয়ারশেল ব্যবহার করে BITS প্রোটোকলে ফাইল ডাউনলোড করা

ধরি, আপনি IIS HTTP সার্ভারে সংরক্ষিত একটি বড় ISO ফাইল ডাউনলোড করতে চান (https://10.1.1.18/erd65_32.iso). এখানে এই URL-এ অ্যানোনিমাস এক্সেস অনুমোদিত আছে ধরা হয়েছে (বादে অথেন্টিকেশন-রিকোয়ার্ড URL-এ এক্সেস আলোচনা করব)।

প্রথমে আপনার পাওয়ারশেল সেশনে BITS মডিউল ইম্পোর্ট করুন:

Import-Module BitsTransfer

মডিউল ইম্পোর্ট হলে সকল উপলব্ধ কমান্ড দেখতে পারেন:

get-command *-BITS*

দেখতে পাচ্ছেন, ৮টি ক্মডলেট উপলব্ধ:

  • Add-BitsFile
  • Complete-BitsTransfer
  • Get-BitsTransfer
  • Remove-BitsTransfer
  • Resume-BitsTransfer
  • Set-BitsTransfer
  • Start-BitsTransfer
  • Suspend-BitsTransfer

BITS ব্যবহার করে কম্পিউটার মাঝপথে সিনক্রোনাস ফাইল ট্রান্সফার

Start-BitsTransfer ক্মডলেট HTTP(s)経由 (Invoke-WebRequest ক্মডলেটের মতো) এবং নেটওয়ার্ক শেয়ার্ড ফোল্ডার থেকে (SMB経由) ফাইল ডাউনলোড করতে দেয়। নির্দিষ্ট URL থেকে BITS প্রোটোকোল ব্যবহার করে ফাইল ডাউনলোড করে লোকাল ডিরেক্টরি C:\Temp-এ সেভ করতে কমান্ড:

Start-BitsTransfer –source https://10.1.1.18/erd65_32.iso -destination c:\temp

মেসেজ "This is a file transfer that uses the Background Intelligent Transfer service (BITS)” মানে নির্দিষ্ট ফাইল BITS ব্যবহার করে ডাউনলোড হচ্ছে।

এই কেসে ক্মডলেট সিনক্রোনাস মোডে ডাউনলোড শুরু করেছে। ডাউনলোড ফাইল এক্সপ্লোরার বা Copy-Item ক্মডলেট দিয়ে কপি করার মতই। স্ক্রিনে একটি প্রগ্রেস বার দেখাবে ডাউনলোড স্ট্যাটাস। যদি কম্পিউটার রিস্টার্ট হয়, তবে ডাউনলোড রিজিউম হবে না (পুরো ফাইল আবার ডাউনলোড করতে হবে)।

BITS-এ অ্যাসিনক্রোনাস মোডে নেটওয়ার্কে বড় ফাইল ট্রান্সফার

BITS ডাউনলোড অ্যাসিনক্রোনাস মোডেও শুরু করা যায়। এর জন্য উপরের কমান্ডে –asynchronous প্যারামিটার যোগ করুন। এই মোডে যদি কিছু হয় (সার্ভার বা ক্লায়েন্ট রিবুট, কমিউনিকেশন চ্যানেল ইন্টারাপ্ট, ইত্যাদি), তবে সোর্স রিস্টোর হলে BITS জব অটোমেটিক্যালি রিজিউম হবে এবং ফাইল ডাউনলোড কানেকশন ইন্টারাপ্ট হওয়ার মুহূর্ত থেকে চালু থাকবে:

Start-BitsTransfer -source https://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronous

গুরুত্বপূর্ণ। ডিফল্টভাবে Start-BitsTransfer Foreground প্রায়োরিটিতে চলে (সর্বোচ্চ সম্ভাব্য প্রায়োরিটি)। অনুমান করা হয় এই মোডে শুরু করা ডাউনলোড চ্যানেল ব্যান্ডউইথের জন্য অন্যান্য প্রসেসের সাথে কম্পিট করবে। এটিকে এড়াতে আপনাকে কমান্ডের আর্গুমেন্ট হিসেবে স্পষ্টভাবে অন্য কোনো প্রায়োরিটি সেট করতে হবে, যেমন -Priority low:

Start-BitsTransfer -source https://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronous -Priority low

অ্যাসিনক্রোনাস BITS টাস্ক ব্যাকগ্রাউন্ডে চলে এবং ফাইল ডাউনলোড প্রসেস স্ক্রিনে দেখায় না। BITS জবের স্ট্যাটাস পাওয়ারশেল কনসোল থেকে Get-BitsTransfer কমান্ড দিয়ে পাওয়া যায়:

Get-BitsTransfer | fl

কমান্ডটি ট্রান্সফার স্ট্যাটাস রিটার্ন করে (এই কেসে ট্রান্সফার শেষ: Transferred), ট্রান্সফারড বাইট সংখ্যা, টোটাল ফাইল সাইজ, ফাইল তৈরির সময় এবং টাস্ক কম্পলিশনের সময় সম্পর্কে ইনফো।

সকল রানিং BITS টাস্কের স্ট্যাটাস টেবিল ফরম্যাটে দেখতে:

Get-BitsTransfer | select DisplayName, BytesTotal, BytesTransferred, JobState | Format-Table -AutoSize

অ্যাসিনক্রোনাস ট্রান্সফার মোড ব্যবহার করার সময় TMP এক্সটেনশন সহ একটি টেম্পোরারি ফাইল তৈরি হয় (ডিফল্টভাবে উইন্ডোজ এক্সপ্লোরারে হিডেন থাকে)। এটিকে সোর্স ফাইলে (যেটি সোর্স সার্ভারে সংরক্ষিত) কনভার্ট করতে Complete-BitsTransfer কমান্ড চালান:

Get-BitsTransfer | Complete-BitsTransfer

BITS ডাউনলোড টাস্ক তখন কম্প্লিটড মনে হয় এবং জবের লিস্ট থেকে রিমুভ হয়ে যায়।

আপনি লোকাল ফাইল আপলোড করতে পারেন রিমোট উইন্ডোজ ফাইল সার্ভারের নেটওয়ার্ক শেয়ার্ড ফোল্ডারে। এর জন্য কমান্ড (সুবিধার জন্য কপি জবের নাম স্পেসিফাই করুন):

Start-BitsTransfer -Source C:\iso\w10_1809.iso -Destination \\manch-fs1\iso -Asynchronous -DisplayName CopyISOtoMan

BITS টাস্ক অস্থায়ীভাবে সাসপেন্ড করতে:

Get-BitsTransfer -Name CopyISOtoMan | Suspend-BitsTransfer

BITS জব রিজিউম করতে Resume-BitsTransfer ক্মডলেট ব্যবহার করুন:

Get-BitsTransfer -Name CopyISOtoMan | Resume-BitsTransfer -Asynchronous

BITS টাস্কে অতিরিক্ত ফাইল যোগ করতে Add-BitsFile ক্মডলেট ব্যবহার করুন:

Get-BitsTransfer -Name CopyISOtoMan | Add-BitsFile -Source C:\iso\w10msu\* -Destination \\manch-fs1\iso -Asynchronous

কম্পিউটারের সকল BITS ডাউনলোড টাস্ক (অন্য ব্যবহারকারীদের শুরু করা সেটিও সহ) ডিলিট করতে:

Get-BitsTransfer -Allusers|Remove-BitsTransfer

System অ্যাকাউন্টের অধীনে চলমান BITS জব ক্যান্সেল করা যাবে না (এরর 0x80070005 "Unable to cancel job")। এমন টাস্ক ক্যান্সেল করতে Remove-BitsTransfer কমান্ড SYSTEM অধীনে এক্সিকিউট করতে হবে।

যদি ফাইল সংরক্ষিত সার্ভার ইউজার অথেন্টিকেশন চায়, তবে নিচের কমান্ড ক্রেডেনশিয়াল স্পেসিফাই করার উইন্ডো দেখাবে:

Start-BitsTransfer -source https://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronous -Priority low -Authentication NTLM -Credential Get-Credential

BITS টাস্কের রেজাল্ট সহজে ট্র্যাক করার জন্য একটি সিম্পল স্ক্রিপ্ট ব্যবহার করা যায়, যা টাস্ক প্রগ্রেস ট্র্যাক করে এবং প্রতি কয়েক সেকেন্ডে ডাউনলোড পার্সেন্টেজ স্ক্রিনে দেখাবে। ডাউনলোড শেষ হলে স্ক্রিপ্ট অটোমেটিক্যালি TMP ফাইলকে সোর্স ফরম্যাটে কনভার্ট করবে:

Import-Module BitsTransfer
$bitsjob = Start-BitsTransfer -Source https://10.1.1.18/erd65_32.iso -Destination c:\temp -Asynchronous
while( ($bitsjob.JobState.ToString() -eq 'Transferring') -or ($bitsjob.JobState.ToString() -eq 'Connecting') )
{
Write-host $bitsjob.JobState.ToString()
$Proc = ($bitsjob.BytesTransferred / $bitsjob.BytesTotal) * 100
Write-Host $Proc “%”
Sleep 3
}
Complete-BitsTransfer -BitsJob $bitsjob

BITS ব্যবহার করে ডিরেক্টরি কন্টেন্ট কপি করা

যেমন বলেছি, BITS-এর জন্য ওয়েব-সার্ভার আবশ্যক নয়, অর্থাৎ আমরা অন্য উইন্ডোজ কম্পিউটার বা নেটওয়ার্ক শেয়ার্ড ফোল্ডার থেকে সরাসরি ফাইল কপি করতে পারি:

Start-BitsTransfer -Source \\lon-rep01\os\RHEL4.8-x86_64-AS-DVD.iso -Destination c:\temp -Asynchronous

BitsTransfer রিকারসিভলি নির্দিষ্ট ফোল্ডার থেকে সকল ফাইল এবং সাবডিরেক্টরি বা অন্য প্রোগ্রাম দ্বারা ব্যবহৃত ফাইল কপি করতে পারে না। নির্দিষ্ট নেটওয়ার্ক শেয়ার্ড ফোল্ডার থেকে সকল ফাইল এবং সাবডিরেক্টরি কপি করতে এই স্ক্রিপ্ট ব্যবহার করুন (পहले টার্গেট ডিরেক্টরি এক্সিস্ট করে কিনা চেক করে তৈরি করুন):

Import-Module BitsTransfer
$Source="\\lond-rep01\share\"
$Destination="c:\tmp\"
if ( -Not (Test-Path $Destination))
{
$null = New-Item -Path $Destination -ItemType Directory
}
$folders = Get-ChildItem -Name -Path $source -Directory -Recurse
$bitsjob = Start-BitsTransfer -Source $Source\*.* -Destination $Destination -asynchronous -Priority low
while( ($bitsjob.JobState.ToString() -eq 'Transferring') -or ($bitsjob.JobState.ToString() -eq 'Connecting') )
{
Sleep 4
}
Complete-BitsTransfer -BitsJob $bitsjob
foreach ($i in $folders)
{
$exists = Test-Path $Destination\$i
if ($exists -eq $false) {New-Item $Destination\$i -ItemType Directory}
$bitsjob = Start-BitsTransfer -Source $Source\$i\*.* -Destination $Destination\$i -asynchronous -Priority low
while( ($bitsjob.JobState.ToString() -eq 'Transferring') -or ($bitsjob.JobState.ToString() -eq 'Connecting') )
{
Sleep 4
}
Complete-BitsTransfer -BitsJob $bitsjob
}

পাওয়ারশেল এবং BITS ব্যবহার করে HTTP সার্ভারে ফাইল আপলোড করা

BITS ব্যবহার করে আপনি শুধু HTTP সার্ভার থেকে ফাইল ডাউনলোড করবেন না, রিমোট ওয়েব সার্ভারে আপলোডও করতে পারবেন। এর জন্য টার্গেট সার্ভারে IIS ওয়েব সার্ভার সাথে Bits Server Extension কম্পোনেন্ট ইনস্টলড থাকতে হবে। IIS ভার্চুয়াল ডিরেক্টরির সেটিংসে Bits Uploads সেকশনে "Allow clients to upload files" অপশন ইনেবল করতে হবে।

যদি আপনি অ্যানোনিমাস অথেন্টিকেশন ব্যবহার করেন, তবে NTFS পারমিশন লেভেলে অ্যানোনিমাস ব্যবহারকারীদের ডিরেক্টরিতে লেখার অনুমতি দিতে হবে। যদি ফাইল আপলোড অথরাইজড ব্যবহারকারীদের অধীনে হয়, তবে আপলোড ফোল্ডারে RW পারমিশন দিতে হবে।

BITS প্রোটোকোল ব্যবহার করে HTTP সার্ভারে ফাইল আপলোড করতে কমান্ড:

Start-bits –source c:\iso\winsrv2016.iso -destination https://10.1.1.18/MEDVImages/winsrv2016.iso –Transfertype Upload

দ্রষ্টব্য: ডিফল্টভাবে IIS ৩০ MB-এ বড় ফাইল আপলোড অ্যালো করে না। বড় ফাইল আপলোড অনুমোদন করতে web.config ফাইলে maxAllowContentLength প্যারামিটারের মান পরিবর্তন করতে হবে।

অতএব, নেটওয়ার্কে SMB প্রোটোকোল ব্যবহার করে সাধারণ ফাইল কপির চেয়ে BITS ফিচার ব্যবহার করা একটি চমৎকার অল্টারনেটিভ। BITS ফাইল ট্রান্সফার টাস্ক কানেকশন ডিসরাপশন বা কম্পিউটার রিস্টার্ট হওয়া সত্ত্বেও সম্পন্ন হয় এবং অন্য অ্যাপ্লিকেশনের সাথে ইন্টারফেয়ার না করে ব্যান্ডউইথ কম احتل আকারে। WAN নেটওয়ার্কে বড় ISO ইমেজ এবং ভার্চুয়াল মেশিন ফাইল (vmdk, vhdx) ট্রান্সফারের জন্য BITS প্রোটোকল অপ্টিমাল সমাধান হতে পারে।

  1. Windows 11/10-এ PowerShell ব্যবহার করে ফাইল Zip ও Unzip করার পদ্ধতি

  2. Windows 11/10-এ PowerShell ব্যবহার করে ফাইল Zip ও Unzip করার পদ্ধতি

  3. Mac-এ বড় ফাইল দ্রুত খুঁজে বের করুন ও রিমুভ করুন – ধাপে ধাপে গাইড

  4. পাওয়ারশেল দিয়ে দক্ষতার সাথে ফাইল ও ফোল্ডার ডিলিট করুন: ধাপে ধাপে গাইড