Sao lưu ADB tạo tệp 0 byte; lời nhắc cho mật khẩu sao lưu hiện tại mặc dù tôi không bao giờ đặt mật khẩu; Không thể đặt mật khẩu


49

Vấn đề:

Mỗi lần tôi chạy bản sao lưu ADB, tôi nhận được một thông báo ở gần cuối màn hình chính Backup starting..., sau đó là một thông báo cho biết Backup finished vài giây sau mặc dù tôi đang sử dụng 17 GB bộ nhớ thiết bị và tệp sao lưu kết quả được tạo với kích thước 0 byte. Tôi không nhận được thông báo lỗi, không có thông tin phản hồi nào cho thấy gì sai, huống chi là có sai. Nó xuất hiện để hoạt động, nhưng cách quá nhanh và tệp sao lưu trống.

Quá trình:

  1. Tôi xác nhận rằng thiết bị được ADB nhận ra bằng cách sử dụng adb deviceslệnh và nhận đầu ra sau:

    List of devices attached
    8e1f368a        device
    
  2. Tôi ban hành lệnh sao lưu ADB (chi tiết để làm theo).

  3. Tôi nhận được thông báo sau tại dấu nhắc lệnh:

    Now unlock your device and confirm the backup operation.
    

    ... Và lời nhắc sau trên điện thoại:

    nhập mô tả hình ảnh ở đây

    Nó không có gì khác biệt những gì tôi làm ở đây (chi tiết để làm theo).

  4. Tôi nhấn Back up my datanút (góc dưới bên phải).

  5. Điện thoại trở về màn hình chính và hiển thị cho tôi Backup starting...tin nhắn, sau đó Backup finishedtin nhắn vài giây sau. Một tệp 0 byte được tạo, được đặt tên là backup.ab mặc định hoặc bất cứ thứ gì tôi đã chỉ định với khóa -f .

Lệnh sao lưu ADB (được sử dụng trong bước 2):

Tôi đã thử nhiều kết hợp tùy chọn, từ đơn giản như

adb backup -all

những thứ như

adb backup -all -apk -s 8e1f368a -f 'C:\Data Files\PDA\Backups\ADB\GalaxyS4_20140919.ab'

Tôi cũng đã thử thêm công -nosystemtắc sau khi đọc cái nàycái này , điều này cho thấy rằng việc cố gắng bao gồm một bản sao lưu hệ thống trên một thiết bị chưa được phân phối có thể dẫn đến một tệp 0 byte và phải sử dụng công tắc này. Nó không có gì khác biệt, quá trình vẫn hoàn thành trong vài giây và tôi vẫn nhận được một tệp 0 byte.

Lời nhắc mật khẩu "Sao lưu toàn bộ" (bước 3):

Tôi khá chắc chắn rằng tôi chưa bao giờ đặt mật khẩu sao lưu trước đây. Tôi chưa bao giờ có cơ hội để đặt mật khẩu này hoặc truy cập cài đặt này theo bất kỳ cách nào trước đây. Tuy nhiên, tôi đã thử tất cả những điều sau đây:

  • Để trống cả mật khẩu
  • Để trống "mật khẩu sao lưu hiện tại" và nhập mật khẩu mới vào hộp thứ hai
  • Nhập mã PIN khóa màn hình hiện tại và tất cả các mã PIN tôi từng sử dụng trước đây làm "mật khẩu sao lưu hiện tại".
  • Nhập mọi mật khẩu tôi có thể nghĩ rằng tôi đã từng sử dụng cho mọi thứ trên thiết bị này

Trong mọi trường hợp, hành vi này hoàn toàn giống như được mô tả trong bước 5. Tôi không gặp lỗi hoặc bất kỳ loại dấu hiệu nào cho thấy có gì sai hoặc mật khẩu của tôi không hợp lệ và không có gợi ý nào về việc nó có thực sự mong đợi mật khẩu hiện tại hay không lĩnh vực nên để trống. (Ảnh chụp màn hình trong câu trả lời này và một số diễn đàn hỗ trợ khác mà tôi đã xem dường như ngụ ý rằng hộp "mật khẩu sao lưu hiện tại" sẽ không được hiển thị nếu không có mật khẩu hiện tại, nhưng đó chỉ là một suy luận; một mật khẩu hiện tại là thực sự cần thiết.)

Tôi nghi ngờ rằng mật khẩu mà nó nhắc nhở có thể là "Mật khẩu sao lưu máy tính để bàn" được đặt trong tùy chọn Nhà phát triển:

nhập mô tả hình ảnh ở đây

Tôi chưa bao giờ đặt mật khẩu đó trước đây. Nếu tôi cố gắng đặt một, tôi nhận được một thông báo nói rằngFailed to set backup password.

Khi tìm kiếm thông tin về lỗi này, tôi đã gặp ít nhất một trường hợp khác trong đó một người gặp vấn đề này nói rằng điều này ngăn anh ta sử dụng bản sao lưu ADB, nhưng anh ta không nói rõ về những gì xảy ra khi anh ta cố gắng sử dụng ADB sao lưu.

Hầu hết những người nhận được tin nhắn này chưa bao giờ đặt mật khẩu trước đó nói rằng giải pháp là để trống mật khẩu hiện tại, nhưng tôi đã thử nó ngay từ đầu và nó không hoạt động. Tôi đã tìm thấy một câu hỏi của một người khác gặp phải vấn đề này và chắc chắn rằng anh ta đã không đặt mật khẩu trước đó . Thật không may, có vẻ như anh ta chưa bao giờ có giải pháp hay thậm chí là một lời giải thích.

Bất kể ADB đang tìm kiếm "Mật khẩu sao lưu trên máy tính để bàn" hay mật khẩu mã hóa ADB là một cái gì đó riêng biệt, điều này làm tôi suy nghĩ tại sao ADB sẽ yêu cầu bạn nhập mật khẩu trước đó để bắt đầu sao lưu mới. Tôi không cố gắng khôi phục, ghi đè hoặc bằng bất kỳ cách nào truy cập dữ liệu được mã hóa trước đó, vì vậy ngay cả khi mật khẩu mã hóa cho bản sao lưu đã được đặt trước đó, tôi không thể tưởng tượng được tại sao mọi người nghĩ rằng đó là một ý tưởng tốt để ngăn bạn khỏi sao lưu thiết bị của bạn nếu bạn không nhớ mật khẩu nào bạn đã sử dụng để mã hóa các bản sao lưu trong quá khứ.

Thông tin thêm:

Model: Samsung Galaxy S4 SCH-I545
Phiên bản hạt nhân: 3.4.0
Phiên bản hệ điều hành: 4.4.2
Phiên bản công cụ SDK Android: 1.16
Gỡ lỗi USB được bật.

Lưu ý rằng lý do của tôi khi sử dụng sao lưu ADB là để sao lưu toàn bộ điện thoại của tôi để ở bên an toàn trước khi root nó * để tôi có thể sử dụng các công cụ sao lưu nandroid như sao lưu Titanium. Vì vậy, bất kỳ đề xuất nào liên quan đến việc root điện thoại của tôi sẽ là một Catch-22, không phải là một giải pháp. Không cần phải nói, thiết lập lại nhà máy cũng không phải là một giải pháp, vì nó sẽ đánh bại toàn bộ mục đích thực hiện sao lưu.

Điện thoại được thiết lập để đồng bộ hóa với các máy chủ Exchange của công ty tôi và có một số chính sách được thi hành bởi máy chủ. Tôi đã nghĩ rằng thiết bị đã được mã hóa khi lần đầu tiên tôi thiết lập đồng bộ hóa với tài khoản công ty, nhưng dường như nó không được mã hóa. Trên thực tế, đó là điều khiến chuỗi sự kiện này chuyển động: Tôi nhận được một thông báo cho tôi biết rằng tôi cần mã hóa thiết bị để tiếp tục kết nối với máy chủ của công ty. Tôi muốn thực hiện sao lưu nandroid trước khi mã hóa, yêu cầu root và tôi muốn sử dụng sao lưu ADB trước khi root.


* Có, tôi biết rằng Khăn lau được coi là an toàn, nhưng tôi không muốn có cơ hội và tôi muốn giải quyết hoặc ít nhất là hiểu vấn đề này trong trường hợp các vấn đề liên quan xảy ra trong tương lai.


Tôi đã gặp một số vấn đề với ADB trên một trong những máy tính bảng của mình (có gốc hoặc không, trong cả hai trường hợp) tương tự nhau (chỉ là cách khác: trong khi adb backuphoạt động tốt, adb restoreluôn thất bại). Hóa ra đó là một vấn đề về quyền (nhà sản xuất đã làm hỏng ROM), vì vậy adb restorekhông thể đọc tệp sao lưu khi nó được chuyển vào thiết bị. Có một chút khó khăn để tìm thấy, và tôi không chắc liệu điều gì đó tương tự có thực sự xảy ra ở đây không; nhưng nó có thể đáng để kiểm tra
Izzy

2
Đối với những người sẽ kết thúc ở đây với cùng một vấn đề 0byte: Tôi gặp vấn đề này vì tôi đã từng thiết lập mật khẩu máy tính để bàn trong Cài đặt và quên nó. Bởi vì thiết bị đã được root, tôi đã làm theo câu trả lời này (của tôi) và mọi thứ đều ổn.
Firelord

Bạn cũng có thể xem: code.google.com/p/android/issues/detail?id=47009 - Nếu bạn đã mã hóa điện thoại của mình, bạn có thể cần sử dụng mật khẩu mã hóa của mình làm "mật khẩu hiện tại" trong tất cả các lời nhắc: trong màn hình "Sao lưu toàn bộ" hoặc trong "Mật khẩu sao lưu máy tính để bàn".
Marco Leogrande

@AdiInbar bạn đã bao giờ giải quyết điều này?
codecowboy

Tôi thực sự phải mất một thời gian để tìm thấy điều này. Tôi không biết nếu tôi không sử dụng đúng từ khóa nhưng đây chính xác là những gì tôi cần!
Thomas

Câu trả lời:


31

Câu trả lời ngắn

Hãy thử sử dụng một phiên bản trước đó của adb. 1.0.32 không hoạt động với tôi, nhưng 1.0.31 thì không.

Câu trả lời dài

Tôi vừa gặp phải sự cố này trên Nexus 5 chạy CyanogenMod 11 (dựa trên Android 4.4) bằng phiên bản hiện tại của Công cụ nền tảng và ADB (Phiên bản Android Debug Bridge phiên bản 1.0.32 eac51f2bb6a8-android).

Sử dụng adb logcatđể xem nhật ký thiết bị, tôi nhận thấy rằng sau khi gọi, adb backup -apk -obb -shared -all -nosystemcó một số mục nhật ký đáng ngờ:

V/BackupManagerService(  811): Requesting full backup: apks=false obb=false shared=false all=false pkgs=[Ljava.lang.String;@4181ffc8
W/BackupManagerService(  811): Unknown package  '-apk' '-obb' '-shared' '-all' '-nosystem', skipping

Trường hợp có vẻ như thiết bị đang diễn giải các tùy chọn dòng lệnh dưới dạng đối số không phải tùy chọn và tạo ra lỗi vì chúng không được cài đặt tên gói. Điều này khiến tôi nghi ngờ giao thức adb hoặc các tùy chọn gọi lệnh / dịch vụ đã thay đổi trên thiết bị so với máy chủ, vì vậy tôi đã thử phiên bản cũ hơn của adb và voilà, nó đã hoạt động.

Tôi đã thực hiện một số thao tác đào và tìm thấy một thay đổi để sử dụng esc_arg trong "sao lưu adb" , điều này khiến tất cả các đối số được trích dẫn đơn khi gọi /system/bin/bu backup. Điều này giải thích hành vi và các đối số trích dẫn đơn trong thông điệp tường trình. Tuy nhiên, nó dường như không khớp với thời gian mà bạn gặp phải lỗi. Nó cũng sẽ đề xuất vấn đề này phổ biến hơn nhiều so với nó. Vì vậy, tôi do dự gọi đây là nguyên nhân, nhưng nó có thể là điểm khởi đầu tốt để điều tra thêm.


2
Sử dụng phiên bản cũ hơn (1.0.31) đã giải quyết vấn đề của tôi. Câu hỏi này stackoverflow.com/q/9555337/1741542 và đặc biệt là câu trả lời này stackoverflow.com/a/23022718/1741542 đã giúp tôi tìm phiên bản cũ hơn, ví dụ platform-tools_r20-linux.zip.
Olaf Dietsche

Có vẻ như nó không hoạt động với tất cả các mô hình. Mặc dù tôi đã sao lưu toàn bộ Samsung S3 mini (Android 4.2) mà không gặp vấn đề gì, tôi không thể làm như vậy với máy tính bảng, trên Android 4.0. Tôi đã thử tất cả từ adb-r10 cho đến adb-r23 (không bao gồm adb-r15) nhưng không thành công.
Olaf Dietsche

4
Tôi gặp vấn đề tương tự với adb 1.0.32 và Nexus 5 (Android 6). Tôi đã giải quyết điều này thông qua trích dẫn rõ ràng các đối số sao lưu, tức là thực thi adb backup '-noapk -noshared -all -nosystem'thay vì adb backup -noapk -noshared -all -nosystem(bên trong bash shell). Không có dấu ngoặc kép, tôi nhận được các thông điệp logcat như thế này: 'cờ dự phòng không xác định -all: -nystem: -noapk', 'không có gói sao lưu nào được cung cấp và không chia sẻ cũng không được đưa ra' và cuối cùng là 'Hoàn tất.'.
maxschlepzig

Cuối cùng tôi cũng đã có một bản sao lưu đầy đủ với Android 4.0. Thật ngu ngốc, đó chỉ là một lần khởi động lại máy tính bảng, điều đó đã đưa tôi đi.
Olaf Dietsche

5
Cảm ơn! Nhân tiện, bạn có thể tải xuống adb 1.0.31 cho tất cả các nền tảng tại đây: ftp.mozilla.org/pub/labs/r2d2b2g
eWolf

16

Dựa trên câu trả lời của kevenoid, nó có thể phụ thuộc vào phiên bản adb nào đang chạy trên điện thoại.

Bạn có thể tìm ra phiên bản nào điện thoại đang chạy tự nhiên bằng cách thực hiện như sau:

Trước tiên hãy tìm hiểu phiên bản bạn đang chạy trên máy tính để bàn của bạn

adb version

Sau đó mở vỏ trên điện thoại của bạn

adb shell

Khi shell được mở thì bạn có thể chạy

adb version

Sau đó thoát khỏi shell bằng cách chạy

exit

Tôi thấy rằng điện thoại của tôi đang chạy phiên bản 1.0.31 chứ không phải 1.0.32 (đó là điện thoại samsung note 2)

Tôi đã thử sử dụng dấu ngoặc kép hoặc thoát các ký tự như Hunter hiển thị nhưng không ai trong số họ làm việc từ dòng lệnh windows. Tuy nhiên, việc hạ cấp đã khắc phục vấn đề không tương thích giữa hai phiên bản.

Tôi đã có thể tìm thấy phiên bản cũ hơn theo hướng dẫn tại đây: https://stackoverflow.com/a/23022718/1741542

Liên kết tải xuống mà tôi đã sử dụng là:
http://dl-ssl.google.com/android/reposeective/pl platform-tools_r20-windows.zip

Các nền tảng khác:


Có cách nào để nâng cấp phiên bản adb trên điện thoại không?
Bin Wang

10

Các câu trả lời khác về các đối số lệnh được trích dẫn là chính xác. Tôi đã thấy rằng nếu bạn thoát khỏi khoảng trống giữa các đối số, nó sẽ hoạt động.

Như thế này: adb backup -apk\ -shared\ -all\ -system


Đây có thể không phải là giải pháp cho vấn đề của OP, nhưng nó là giải pháp tốt hơn cho vấn đề của @ Kevinoid so với sử dụng ADB cũ, không hiệu quả với tôi.
Hunter Perrin

Đây là một bản sao câu trả lời của Kevinoid mà không có lý do. Tuy nhiên, nó hoạt động tốt với tôi và tôi thích sử dụng \ to '
Neil Mayhew

1
Giải pháp này hiệu quả với tôi, không cần hạ cấp adb
freethinker

Tôi có thể xác nhận sự nghi ngờ của @HunterPerrin rằng đây là một vấn đề khác vì tôi đã thử điều này trước và nó không giải quyết được vấn đề của tôi, nhưng lần thứ hai tôi đã chuyển sang 1.0.31 adb, nó bắt đầu sao chép chính xác
Sirens

7

Không có cách giải quyết nào phù hợp với tôi ở đây và tôi không muốn hạ cấp các công cụ SDK của mình. Đây là những gì tôi nghĩ ra: bỏ qua adb backuptrên máy tính và đi thẳng đến thiết bị qua adb shell.

$adb version
Android Debug Bridge version 1.0.35
Revision fc2a139a55f5-android

$ adb shell
shell@jflte:/ $ bu 1 backup -apk app.package.name > /sdcard/backup.ab
shell@jflte:/ $ exit

$adb pull /sdcard/backup.ab
[100%] /sdcard/backup.ab

Điều này gọi /system/bin/buvà kết xuất tệp sao lưu vào STDOUT (Mô tả tệp # 1). Các tham số giống nhau adb backup <params>-> bu 1 backup <params>. Đầu ra được chuyển hướng đến một tệp trên thiết bị và sau đó có thể được kéo như bất kỳ tệp nào.

Hạn chế duy nhất là bạn không thể thực hiện sao lưu toàn bộ nếu thiết bị của bạn đã đầy hơn một nửa. Điều này có thể được giải quyết xung quanh nếu bạn có khe cắm SdCard bên ngoài. bucó thể viết ở đó ngay cả trên Android 4.4.2, vì đây là một ứng dụng hệ thống. /mnt/extSdCard/backup.ablàm việc tương tự cho tôi như /sdcard.


4

thở dài Tôi thực sự xin lỗi nếu đây là trường hợp, và bạn dường như cẩn thận đánh giá bằng các ảnh chụp màn hình và dòng lệnh của bạn, nhưng tôi phát hiện ra sự thất vọng của mình với các triệu chứng tương tự và nghĩ rằng tôi sẽ đăng bài trong trường hợp những người khám phá trong tương lai thực hiện nó ở đây. Nó chỉ ra rằng adb rất kén chọn các dấu gạch ngang đơn và đôi trong các tùy chọn của nó. Đối với tôi, dấu gạch ngang kép sao chép chính xác trường hợp này: cùng một dấu nhắc trên điện thoại, cùng một tệp 0 byte. Dấu gạch ngang đơn mặc dù có các tên đối số dài hoạt động như một nét duyên dáng.

Trong trường hợp có vấn đề, điện thoại của tôi là Samsung Galazy Note 2 AT & T SGH-i317 chạy Android 5.1 / Cyanogenmod 12.1.


2
Tôi hơi bối rối liệu điều này nên được đăng dưới dạng câu trả lời hoặc bình luận thay thế. OP cho thấy anh ấy đang sử dụng dấu gạch ngang đơn, không phải dấu gạch ngang kép, vì vậy câu trả lời của bạn có thể bị mất dấu. Tôi thừa nhận câu trả lời này là thông tin (giá trị bổ sung), nhưng dường như không trả lời được vấn đề của OP.
Andrew T.

Điều này đã giải quyết vấn đề của tôi.
John Freeman

Xin vui lòng gửi dòng lệnh thực tế của bạn.
RoboJ1M

2

Bạn cần thực thi lệnh sao lưu adb trên phiên bản adb 1.0.31.

Đối với cửa sổ tôi đã làm:

Nhật ký:

$ adb sao lưu -apk -obb-shared -all -system -f bckp.ab

máy chủ adb đã hết hạn. giết ...

  • daemon bắt đầu thành công *

Bây giờ mở khóa thiết bị của bạn và xác nhận hoạt động sao lưu.

... Sau đó thiết lập mọi thứ trở lại bình thường.


1

OK, đây là cách tôi sửa lỗi của tôi.

Tôi đã thử giải pháp Hunter Perrin:

adb backup -apk\ -shared\ -all\ -system

Nhưng nó chỉ trở lại ngay lập tức mà không có lỗi, không có màn hình sao lưu trên điện thoại.

Thông qua thử nghiệm và lỗi này làm việc cho tôi:

adb backup -all\

1

Tôi nghĩ rằng tôi có một giải pháp cho những người sử dụng 1.0.32:

nhập mật khẩu khi được nhắc trên màn hình android

Mặc dù thực tế là nó nói rằng nó sẽ sử dụng mật khẩu mặc định nếu bạn không nhập, tôi tin rằng nó không và adb 1.0.32 có lẽ không cho phép tạo các bản sao lưu không được mã hóa.

Nhập mật khẩu làm việc cho tôi, sau đó tôi đã kết thúc bằng cách sử dụng "Trình trích xuất sao lưu Android" (Cảnh báo Sourceforge) và "Chính sách mở rộng mã hóa Java (JCE) không giới hạn" để trích xuất nó thành một tệp tar.


1

Tôi gặp vấn đề nghịch đảo: 1.0.31 với điện thoại mới hơn (Android 7) cũng không thành công. 1.0.31 sử dụng: làm dấu phân cách khi truyền đối số cho điện thoại. Như adb logcat -s BackupManagerServicecho thấy, adb mới hơn trên điện thoại cũng không thể xử lý kiểu cũ: 02-19 01:59:44.330 1100 9830 W BackupManagerService: Unknown package com.gameloft.android.ANMP.GloftPOHM:-apk, skipping May mắn thay, adb mới hơn cũng chấp nhận khoảng trắng làm dấu phân cách, do đó, việc bao gồm các đối số trong dấu ngoặc kép hoạt động, ví dụ: adb.exe backup "com.gameloft.android.ANMP.GloftPOHM -apk" -f game-backup.ab

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.