Computer >> Máy Tính >  >> Hệ thống >> máy chủ Windows

Sao chép các tệp lớn qua mạng không đáng tin cậy bằng BITS và PowerShell

Theo quy định, trong mạng cục bộ và mạng toàn cầu, các tệp được truyền giữa các thiết bị bằng giao thức SMB, FTP hoặc HTTP. Vấn đề của tất cả các giao thức này là một số rắc rối khi tiếp tục tải xuống các tệp lớn, điều này có thể trở nên tồi tệ hơn nếu mạng chậm hoặc không đáng tin cậy. Hơn nữa, khi sao chép tệp bằng các giao thức này, tất cả băng thông khả dụng giữa máy chủ và người nhận sẽ được sử dụng, điều này có thể ảnh hưởng tiêu cực đến hiệu suất mạng và hoạt động của các ứng dụng mạng khác (không phải lúc nào cũng có thể định cấu hình chính sách QoS chính xác trên mạng Trang thiết bị). Trong bài viết này, chúng tôi sẽ xem xét cách sử dụng giao thức BITS và PowerShell để sao chép các tệp lớn qua mạng chậm hoặc không ổn định.

Giao thức BITS

BITS (Dịch vụ truyền tải thông minh trong nền) là một dịch vụ Windows được sử dụng để truyền tệp giữa các hệ thống. Bạn có thể tải xuống và tải tệp lên bằng giao thức BITS. Giao thức này được máy tính sử dụng khi nhận tệp từ máy chủ khi thực hiện cập nhật Windows tự động (bao gồm cả trường hợp khi tải xuống bản cập nhật từ máy chủ WSUS), khi nhận chương trình từ điểm phân phối SCCM, v.v.

Ưu điểm của Giao thức BITS :

  • BITS là giao thức thông minh có thể kiểm soát băng thông đã sử dụng của kênh giao tiếp và không ảnh hưởng đến hoạt động của các ứng dụng và dịch vụ mạng khác. BITS chỉ có thể sử dụng băng thông miễn phí (chưa phân bổ) và tự động thay đổi tốc độ dữ liệu trong quá trình truyền (nếu các ứng dụng khác tăng mức sử dụng mạng, ứng dụng khách BITS có thể giảm tốc độ truyền dữ liệu qua mạng);
  • Người dùng có thể tiến hành tải xuống tệp ở chế độ nền trong suốt;
  • Công việc BITS ở chế độ tiếp tục sẽ tự động tiếp tục ngay cả khi kênh giao tiếp giữa máy tính và máy khách bị hỏng hoặc sau khi máy tính được khởi động lại;
  • Bạn có thể tạm dừng hoặc tiếp tục tải xuống bằng BITS mà không làm mất dữ liệu; Lưu ý . Khả năng tiếp tục sao chép tệp qua mạng cũng có sẵn trong tiện ích robocopy.exe, cho phép bạn tiếp tục tải tệp xuống nếu mất kết nối.
  • BITS cho phép bạn quản lý mức độ ưu tiên của các công việc tải xuống;
  • Truyền tệp giữa các máy tính xảy ra trên cổng 80 (HTTP) hoặc 443 (HTTPS), vì vậy bạn sẽ không phải mở thêm cổng trên tường lửa. Ví dụ:cổng 445, được sử dụng khi sao chép tệp qua giao thức SMB (đừng quên rằng có nhiều lỗ hổng trong phiên bản cũ của giao thức SMB 1.0);
  • Máy chủ IIS đã triển khai không nhất thiết phải có ở phía máy chủ và người nhận BITS.

Do đó, BITS là giao thức thích hợp hơn để truyền các tệp lớn qua mạng chậm và không ổn định (kênh vệ tinh, kết nối GPRS, v.v.).

BITS:Yêu cầu về phiên bản hệ điều hành và PowerShell

Giao thức BITS đã xuất hiện trong Windows XP, trong đó bitsadmin.exe tiện ích có thể được sử dụng để quản lý các tác vụ BITS. Tiện ích này vẫn được hỗ trợ, nhưng không được dùng nữa. Để quản lý các công việc BITS, bạn nên sử dụng các lệnh ghép ngắn PowerShell đặc biệt.

Để làm việc trong trường hợp này, bạn cần có hệ điều hành không thấp hơn Windows Vista hoặc Windows Server 2008 và PowerShell 2.0 hoặc mới hơn. Các phiên bản hiện đại của Windows 10 và Windows Server 2016/2012 R2 hỗ trợ đầy đủ BITS.

Mẹo . Cũng có thể sử dụng Windows Server 2003. Trong trường hợp này, bạn sẽ phải cài đặt bản cập nhật KB 923845 và PowerShell 2.0.

Cần hỗ trợ BITS ở phía cả máy khách và máy chủ.

Cách tải xuống tệp qua giao thức BITS bằng PowerShell?

Giả sử bạn muốn tải xuống tệp ISO lớn được lưu trữ trên máy chủ IIS HTTP ( https://10.1.1.18/erd65_32.iso ). Giả định rằng quyền truy cập ẩn danh được phép vào URL này (sau này chúng tôi sẽ xem xét quyền truy cập vào URL có xác thực).

Trước hết, hãy nhập mô-đun BITS trong phiên PowerShell của bạn:

Import-Module BitsTransfer

Sau khi mô-đun được nhập, danh sách tất cả các lệnh có sẵn có thể được hiển thị như sau:

get-command *-BITS*

Sao chép các tệp lớn qua mạng không đáng tin cậy bằng BITS và PowerShell

Như bạn có thể thấy, có 8 lệnh ghép ngắn có sẵn:

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

Truyền tệp đồng bộ giữa máy tính bằng BITS

Start-BitsTransfe r cmdlet cho phép bạn tải xuống các tệp qua (các) HTTP (như lệnh ghép ngắn Invoke-WebRequest) cũng như từ các thư mục chia sẻ mạng (thông qua SMB). Để tải xuống tệp từ URL được chỉ định bằng giao thức BITS và lưu tệp đó vào thư mục cục bộ C:\ Temp, hãy sử dụng lệnh:

Start-BitsTransfer –source https://10.1.1.18/erd65_32.iso -destination c:\temp
Sao chép các tệp lớn qua mạng không đáng tin cậy bằng BITS và PowerShell

Thông báo “ Đây là quá trình truyền tệp sử dụng dịch vụ Truyền tải thông minh trong nền (BITS)” có nghĩa là tệp được chỉ định đang được tải xuống bằng BITS.

Trong trường hợp này, lệnh ghép ngắn đã bắt đầu tải xuống tệp ISO ở chế độ đồng bộ. Quá trình tải xuống tương tự như quy trình sao chép tệp thông thường thông qua File Explorer hoặc sử dụng lệnh ghép ngắn Copy-Item. Một thanh tiến trình được hiển thị trên màn hình, hiển thị trạng thái tải xuống. Nếu máy tính được khởi động lại, quá trình tải xuống sẽ không được tiếp tục (bạn sẽ cần tải xuống lại toàn bộ tệp).

Truyền tệp lớn qua mạng với BITS ở chế độ không đồng bộ

Quá trình tải xuống BITS cũng có thể được bắt đầu ở chế độ không đồng bộ. Để làm điều đó, hãy thêm –asynchronous tham số cho lệnh hiển thị ở trên. Trong chế độ này, nếu có điều gì đó xảy ra (máy chủ hoặc máy khách khởi động lại, kênh liên lạc bị gián đoạn, v.v.), công việc BITS sẽ tự động tiếp tục sau khi nguồn được khôi phục và quá trình tải xuống tệp sẽ được tiếp tục kể từ thời điểm kết nối bị gián đoạn:

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

Sao chép các tệp lớn qua mạng không đáng tin cậy bằng BITS và PowerShell

Quan trọng . Theo mặc định, Start-BitsTransfer chạy với mức ưu tiên Foreground (mức ưu tiên cao nhất có thể). Người ta cho rằng quá trình tải xuống bắt đầu ở chế độ này sẽ cạnh tranh với các quá trình khác về băng thông kênh. Để tránh nó, bạn phải đặt rõ ràng bất kỳ mức độ ưu tiên nào khác làm đối số của lệnh, e. g., -Giá thấp:

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

Tác vụ BITS không đồng bộ chạy trong nền và quá trình tải xuống tệp không được hiển thị trên màn hình. Trạng thái của công việc BITS có thể được lấy từ bảng điều khiển PowerShell bằng cách sử dụng Get-BitsTransfer lệnh:

Get-BitsTransfer | fl

Sao chép các tệp lớn qua mạng không đáng tin cậy bằng BITS và PowerShell

Lệnh trả về trạng thái truyền (trong trường hợp này là quá trình chuyển:Đã chuyển), thông tin về số byte được chuyển, tổng kích thước tệp, thời gian tệp đã được tạo và thời gian hoàn thành tác vụ.

Bạn có thể xem trạng thái của tất cả các tác vụ BITS đang chạy trên máy tính ở dạng bảng:

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

Khi sử dụng chế độ truyền không đồng bộ, tệp tạm thời có TMP tiện ích mở rộng được tạo (theo mặc định, nó bị ẩn trong Windows Explorer). Để chuyển đổi nó thành tệp nguồn (được lưu trữ trên máy chủ nguồn), hãy chạy lệnh Complete-BitsTransfer :

Get-BitsTransfer | Complete-BitsTransfer

Sao chép các tệp lớn qua mạng không đáng tin cậy bằng BITS và PowerShell

Sau đó, nhiệm vụ tải xuống BITS được coi là đã hoàn thành và bị xóa khỏi danh sách công việc.

Bạn có thể tải tệp cục bộ lên thư mục chia sẻ mạng trên máy chủ tệp Windows từ xa. Để thực hiện việc này, hãy sử dụng lệnh sau (để thuận tiện, bạn có thể chỉ định tên của lệnh sao chép):

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

Để tạm thời tạm ngưng một nhiệm vụ BITS, hãy chạy:

Get-BitsTransfer -Name CopyISOtoMan | Suspend-BitsTransfer

Để tiếp tục công việc BITS, hãy sử dụng lệnh ghép ngắn Resume-BitsTransfer:

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

Bạn có thể thêm các tệp bổ sung vào tác vụ BITS bằng cách sử dụng lệnh ghép ngắn Add-BitsFile:

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

Để xóa tất cả các tác vụ tải xuống BITS trên máy tính (bao gồm cả những tác vụ do người dùng khác bắt đầu), hãy chạy lệnh sau:

Get-BitsTransfer -Allusers|Remove-BitsTransfer

Bạn không thể hủy các công việc BITS đang chạy trong tài khoản Hệ thống (lỗi 0x80070005 “Không thể hủy công việc”). Để hủy một tác vụ như vậy, bạn cần thực hiện lệnh Remove-BitsTransfer trong SYSTEM.

Nếu máy chủ, nơi tệp được lưu trữ, yêu cầu xác thực người dùng, lệnh sau sẽ cho phép hiển thị một cửa sổ để chỉ định thông tin xác thực để truy cập tài nguyên:

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

Sao chép các tệp lớn qua mạng không đáng tin cậy bằng BITS và PowerShell

Để theo dõi kết quả của một nhiệm vụ BITS dễ dàng hơn, bạn có thể sử dụng một tập lệnh đơn giản, cho phép theo dõi tiến trình của nhiệm vụ và cứ sau vài giây một lần hiển thị phần trăm tải xuống trên màn hình. Sau khi quá trình tải xuống kết thúc, tập lệnh sẽ tự động chuyển đổi tệp TMP thành định dạng nguồn:

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

Làm cách nào để sao chép nội dung thư mục bằng BITS?

Như chúng tôi đã đề cập, BITS không yêu cầu máy chủ Web và điều đó có nghĩa là chúng tôi có thể sao chép tệp trực tiếp từ các máy tính Windows khác hoặc các thư mục chia sẻ trên mạng:

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

BitsTransfer không thể sao chép đệ quy tất cả các tệp và thư mục từ một thư mục cụ thể hoặc các tệp được các chương trình khác sử dụng. Để sao chép tất cả các tệp và thư mục con từ thư mục chia sẻ mạng đã chỉ định, hãy sử dụng tập lệnh này (trước tiên bạn có thể kiểm tra xem thư mục đích có tồn tại hay không và tạo nó):

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
}

Sao chép các tệp lớn qua mạng không đáng tin cậy bằng BITS và PowerShell

Cách tải tệp lên máy chủ HTTP bằng PowerShell và BITS?

Với BITS, bạn không chỉ có thể tải xuống tệp từ máy chủ HTTP mà còn có thể tải tệp đó lên máy chủ web từ xa. Để thực hiện việc này, máy chủ web IIS với Phần mở rộng máy chủ Bits thành phần phải được cài đặt trên máy chủ đích. Trong cài đặt của thư mục ảo IIS trong phần Tải lên bit , bạn cần bật phần “ Cho phép khách hàng tải tệp lên ”Tùy chọn.

Sao chép các tệp lớn qua mạng không đáng tin cậy bằng BITS và PowerShell

Nếu bạn sử dụng xác thực ẩn danh, bạn phải cho phép người dùng ẩn danh ghi vào thư mục ở cấp độ quyền NTFS. Nếu quá trình tải lên tệp được thực hiện với người dùng được ủy quyền, họ cần cấp quyền RW cho thư mục tải lên.

Để tải tệp lên máy chủ HTTP bằng giao thức BITS, hãy chạy lệnh sau:

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

Xin lưu ý rằng theo mặc định IIS cho phép bạn tải lên các tệp có dung lượng lên đến 30 MB. Để cho phép tải lên các tệp lớn, bạn cần thay đổi giá trị trong tham số maxAllowContentLength trong tệp web.config.

Vì vậy, sử dụng các tính năng BITS là một giải pháp thay thế tuyệt vời cho việc sao chép tệp thông thường qua mạng bằng giao thức SMB. Tác vụ truyền tệp BITS được thực hiện bất chấp gián đoạn kết nối hoặc máy tính khởi động lại và không chiếm nhiều băng thông mà không ảnh hưởng đến các ứng dụng khác. Giao thức BITS có thể là giải pháp tối ưu để chuyển các tệp máy ảo và ảnh ISO lớn (vmdk, vhdx) qua mạng WAN.