rsyncの全体的な進捗状況を表示することは可能ですか?


229

私はすでにこのオプションを検索しましたが、カスタムパッチを含むソリューションのみを見つけました。--helpに表示されず、これ以上情報が見つからないという事実は、おそらく答えが「いいえ」であることを示していますが、これを確認したいと思います。

rsyncでファイル転送の合計進行状況を表示することは可能ですか?


22
rsync 3.1.0以降、基本的なファイル転送の合計進行状況が含まれるようになりました。詳細については、回答serverfault.com/a/441724/107793を参照してください。
フロリアンフェルドハウス

14
受け入れられた回答を変更してください。@Davidの答えはまったく役に立ちません。
ネイビン

回答:


36

ダナキムは正しいです。合計進捗インジケータを追加する簡単な方法はありません。

この理由は、rsyncが同期するファイルのリストを見たときに、どのファイルを変更する必要があるかを事前に知らないためです。デルタ転送を行っている場合、デルタ自体を事前に計算して、実行する必要がある作業の全体像を把握する必要があります。

言い換えれば、どれだけの作業を行うべきかを計算する最も簡単な方法は、実際にそれを行うことです。


42
(転送されたデータ+スキップされたデータ)/(ソースの合計データ)、または(転送またはスキップされたファイルの数)/(ソースのファイルの数)のような単純なインジケーターを使用できます。それは特に正確になるとは限りませんが、アイデアを与えるでしょう。一日の終わりに大きな乗り換えをしていて、コンピュータをオフにして待機するのか、それとも夜のために走らせるのか迷っているときに適しています
...-naught101

3
結論が正しいとは思いません。@ naught101は質問に対してより公平であると思います--size-only。使用しないなどに関する答えを予測することはさらに不正確だと思います。
エヴァンキャロル

2
私が返信を書いたとき、それは正確でした-rsyncにはトータルプログレスインジケータのメカニズムがありませんでした。そして、はい、あなたはあなた自身を書くことができますが、非常に少数の人々が書きます。
デビッドマッキントッシュ14年

6
新参者のためのコメント:それは今可能です:serverfault.com/a/441724/422003
imposeren

2つのパスを使用して、1つは「--dry-run」(予想される合計ファイル数)、2つ目はファイルに記録された詳細な出力(および完了した行または「pv」へのパイプを使用)で、完了を簡単に推定できます。欠点は、ネストされた大きなディレクトリを2回スキャンすることです。必要に応じて、つまり顧客データの安全な移行を確保することで、これは受け入れられるかもしれません。
Ivesの

377

rsync(バージョン3.1.0プロトコルバージョン31、Ubuntu Trusty 14.04でテスト済み)でこれを行う公式の方法があります。

#> ./rsync -a --info=progress2 /usr .
    305,002,533  80%   65.69MB/s    0:00:01  xfr#1653, ir-chk=1593/3594)

/usrファイルシステム全体を転送するためにこの機能が必要で/usrあり、適切な代表的なサンプルであるように思われたため、フォルダで試しました。

これ--info=progress2は、たとえ部分的な値であっても、全体的な割合を示します。実際、私の/usrフォルダーは6ギガ以上です。

#> du -sh /usr
6,6G    /usr/

そしてrsyncそれをすべてスキャンする多くの時間を要しました。だから、ほとんどの場合、私が見たパーセンテージは約90%完了しましたが、それでも何かがコピーされているのを見るのは安心です:)

参照:


19
これは3.1.0でリリースされたことに注意してください。これは、時間の観点で必ずしも正確ではないことに注意することも重要です。基本的に、リモートエンドに存在することが確認されたデータの量を示しています。レートとは、リモートエンドでデータが正しいと学習されているレートです(すでにその方法であったか、新しいデータが転送されて正しいデータになったか)。そのため、非常に便利ですが、警告を理解する必要があります。
ケビンコックス

15
自作でOSXでこれを使用するには、「BREWタップ自作/ dupes;醸造のrsyncをインストールする」
マット・キャリア

18
それ--info=progress2は動作しません-v
サンマイ

42
--no-i-r同様にスイッチを追加しrsyncます。したがって、増分スキャンではなく、コピーする前に完全にスキャンし、残っている作業量を把握して表示します。
アレックス

16
--human-readable(または-h)を使用して、進行中の合計サイズをMB / GBで表示できることに注意してください。
木の実

45

'pv'で(apt-get install pvDebianおよびubuntuで)できます。転送されるデータの量はファイルのサイズとは関係なく、ソースと宛先の間のデルタであるため、転送されるファイルの数を監視することをお勧めします。また、ファイルのカウントでは、1つの大きなデルタと小さなデルタの別の同じ進捗をカウントします。つまり、いずれにせよ、ETAの見積もりは遠いかもしれません。サイズベースのETAは、宛先が空の場合にのみ機能します。この場合、デルタ==ソースのサイズです。

一般的な考え方は、rsyncから「転送」されたファイルごとに1行を出力し、「pv」でそれらの行をカウントすることです。

rsync -ai / source remote:/ dest | pv -les [ファイル数]> / dev / null

私は、このケースでは、あなたがはるかに安い使用することができます(いくつかの理由で)バックアップ全体のファイルシステムへの傾向があるdf(というよりも、ファイルの数を取得するduか、findrsyncはそれをやった後ウィッヒは、あなたのソース階層に別の時間を横断します)。-xオプションは、rsyncが同じソースファイルシステムにとどまることを確認するために表示されます(他の内部マウントに従いません)。

rsync -aix / source remote:/ dest | pv -les $(df -i / source | perl -ane 'print $ F [2] if $ F [5] =〜m:^ /:')> / dev / null

/ source内のファイルを一般的な方法でカウントする場合は、find /source|wc -l再度使用します(警告:I / Oで遅くて重いかもしれません)。


1
zerodeuzが指定されているように、df -i /source/ sourceが存在するすべてのパーティションからiノード(ファイル)の数を取得するため、パーティション全体をrsyncしている場合にのみ「df」を使用します。それ以外の場合は、「find」を使用して、「$()」式内のディレクトリ内のファイルをカウントします
lepe

1
duまたはfind- の代替手段-不完全なコピーを終了するか、削除を伴うインプレース更新を行う-を使用rsync -ai --dry-runして、メインの実行が渡す同じファイルリストを取得するpv
-Izkata

32

以下は、rsyncバージョン3.0.0以降に適用されます。以下に説明するオプションは、2008年3月1日のそのリリースで導入されました。

--info = progress2使うこともでき--no-INC-再帰オプション(またはその短い--no-IRインクリメンタル再帰を無効にするには、エイリアスを)。

これにより、転送が進行するにつれてファイルが徐々に検出されるのではなく、ファイルリスト全体が最初に作成されます。開始する前にすべてのファイルを知っているので、全体的な進捗状況のより良いレポートを提供します。これは、ファイルの数に適用されます-ファイルサイズに基づいて進行状況を報告しません。

これにはトレードオフが伴います。事前にファイルリスト全体を作成すると、メモリコストが高くなり、実際の転送の開始が大幅に遅れる可能性があります。ご想像のとおり、ファイルが多いほど、遅延は長くなり、必要なメモリも多くなります。

以下はrsyncマニュアルからのものです(ソース-http : //rsync.samba.org/ftp/rsync/rsync.html):

-r、-再帰

これは、ディレクトリを再帰的にコピーするようにrsyncに指示します。--dirs(-d)も参照してください。rsync 3.0.0から、使用される再帰アルゴリズムは、以前よりもはるかに少ないメモリを使用し、最初のいくつかのディレクトリのスキャンが完了した後に転送を開始する増分スキャンになりました。このインクリメンタルスキャンは再帰アルゴリズムにのみ影響し、非再帰的転送は変更しません。また、転送の両端が少なくともバージョン3.0.0である場合にのみ可能です。

一部のオプションでは、rsyncが完全なファイルリストを認識する必要があるため、これらのオプションは増分再帰モードを無効にします。これらには、-delete-before、-delete-after、-prune-empty-dirs、および--delay-updatesが含まれます。このため、-deleteを指定したときのデフォルトの削除モードは、接続の両端が少なくとも3.0.0のときに--delete-duringになります(この改善された削除モードを要求するには、-delまたは--delete-duringを使用します)明示的に)。--delete-afterオプションを使用するよりも良い選択である--delete-delayオプションも参照してください。

増分再帰は、-no-inc-recursiveオプションまたはその短い--no-irエイリアスを使用して無効にできます。

特定のバージョンの違いについては、https://rsync.samba.orgも参照してください(スクロールしてリリースニュースのリンクを確認してください)。


3
このおかげで、他の回答では、%ageが上下し続けます!
-artfulrobot

28

長時間の移動の場合、du -s両側で走ることに満足しています。でもwatch -n1 du -s、本当に不安を感じたら。

watchコマンド(du -sここ)を定期的に(ここでは1秒ごとに)実行し、出力を全画面表示します。


4
watchコマンドの例に感謝します!
カム

2
//賢い!linfo.orgによると:「du(ディスク使用量)コマンドは、すべてのコンテンツを含むディレクトリツリーのサイズと個々のファイルのサイズを報告します。これは、スペースホグ(ディレクトリやファイル)の追跡に役立ちます。ハードディスクドライブ(HDD)またはその他のストレージメディアで大量または過剰なスペースを消費します。」
ネイサンバサニーズ

10
duが実行可能な場合、どのような長い転送を行うのかわかりません。結果はTBおよびMのファイルになりますが、duは地獄のように遅いです。
誰も

2
私の「長い転送」では、du操作が完了するまで約1時間かかります。その間、rsyncはディスクへのアクセスを巡って争っているため、rsyncの実行速度が大幅に低下します。
Abhi Beckertの

12

基本的にいいえ。--progressフラグを使用してファイルごとにのみ進行状況を表示できますが、それはそれに関するものです。

私はあなたがそれの周りにラッパーを書くか、すでに見つけたパッチのいずれかを使用できると思いますが、本当にそれが価値があるかどうかを自問する必要があります、あなたは実際にrsyncの完全な進歩が必要ですか?


進行状況の合計とファイルの進行状況を素敵な進行状況バーとして表示するラッパースクリプトを次に示します。gist.github.com
JohannesBuchner

1
--progressを使用--info=progress2して作業方法を変更でき、グローバルな進捗状況が表示されます。増分再帰アルゴリズムを有効にするには、無効にする必要があります。したがって、--info=progress2 --no-inc-recursive
マット

@ j13rでも、この要点を答えとして共有できます!その素晴らしいオプション!
スカイワインダー

8

zerodeuxからの回答を使用して、独自の小さなbashスクリプトを作成しました。

#!/bin/bash

RSYNC="ionice -c3 rsync"
# don't use --progress
RSYNC_ARGS="-vrltD --delete --stats --human-readable"
SOURCES="/dir1 /dir2 /file3"
TARGET="storage::storage"

echo "Executing dry-run to see how many files must be transferred..."
TODO=$(${RSYNC} --dry-run ${RSYNC_ARGS} ${SOURCES} ${TARGET}|grep "^Number of files transferred"|awk '{print $5}')

${RSYNC} ${RSYNC_ARGS} ${SOURCES} ${TARGET} | pv -l -e -p -s "$TODO"

7

また、rsyncの合計進行状況を表示する方法も検索しました。この投稿から有用な回答を見つけました:https ://stackoverflow.com/questions/7157973/monitoring-rsync-progress

基本に、rsync 3.1.0の devバージョンで--info = progress2を使用できます。ここでは何であるドキュメントは述べています:

個々のファイルではなく、転送全体に基づいて統計を出力する--info = progress2オプションもあります。ファイル名を出力せずにこのフラグを使用します(たとえば、多くの名前で画面をスクロールせずに転送の様子を確認したい場合は、-vを回避するか、-info = name0を指定します(-を指定する必要はありません--info = progress2を使用するための進行オプション


1
--info=name0金ですgold
ipatch

6

zerodeuxからの回答を使用して、独自の小さなBASHスクリプトを作成しました。

#!/bin/bash

RSYNC="ionice -c3 rsync"
# don't use --progress
RSYNC_ARGS="-vrltD --delete --stats --human-readable"
SOURCES="/dir1 /dir2 /file3"
TARGET="storage::storage"

#echo "Executing dry-run to see how many files must be transferred..."
TODO=$(find ${SOURCES} | wc -l)

${RSYNC} ${RSYNC_ARGS} ${SOURCES} ${TARGET} | pv -l -e -p -s "$TODO"

TODOドライランを

TODO=$(find ${SOURCES} | wc -l)

ファイルの数を非常に高速に検出します!


作品を見つけるようにrsync --dry・ランよりもはるかに良いです!
hopeseekr

4
findrsyncローカルで実行している場合にのみ機能します。rsync --dry-runリモートソースでも動作します
...-voretaq7

6

最新のrsyncがなく(たとえば、OS Xには2.6.9があります)、を使用できない場合--info=progress2、進行中のスクロールテキストのページから自分を救う別の方法があります。

rsync -aPh <source> <destination> | xargs -L1 printf "\33[2K\rTransferring: %s"

これにより、転送されている最新のファイルの名前が1行で出力されます。

Transferring: the-latest.file


4

つかいます

lsof -ad3-999 -c rsync

rsyncが現在開いているファイルを確認するには(filesizeを表示します)rsyncは隠しファイルにローカルにコピーします


私はこれを投稿したかったfor i in $(pgrep 'rsync'); do ls -l /proc/$i/fd; doneが、あなたの解決策は簡単です。
Aalex Gabi

4

これをコメントにしますが、評判は十分ではありません。選択した回答に対するnaught101のコメントに応じて、-progressオプションは、転送する合計量のうち転送されたファイルの数を示します。この投稿を見て、出力をより注意深く見るまで、私はこれに気付きませんでした。

'to-check'統計は、合計から除外されたファイルの数を示します。これは、すべてのファイルが完全にコピーされることを知っているため、新しい宛先にrsyncするときに最も役立ちます。

manページから:

When [each] file transfer  finishes,  rsync  replaces  the
progress line with a summary line that looks like this:

    1238099 100%  146.38kB/s    0:00:08  (xfer#5, to-check=169/396)

In this example, the file was  1238099  bytes  long  in
total,  the average rate of transfer for the whole file
was 146.38 kilobytes per second over the 8 seconds that
it took to complete, it was the 5th transfer of a regu-
lar file during the current rsync  session,  and  there
are 169 more files for the receiver to check (to see if
they are up-to-date or not) remaining out  of  the  396
total files in the file-list.

3

ここでの注意点は、--info = progress2でさえも、進行状況が表示されている時点でrsyncが「知っている」ファイルの数に基づいているため、完全に信頼できるものではないことに注意してください。これは、必ずしも同期が必要なファイルの総数ではありません(たとえば、深くネストされたディレクトリで多数の大きなファイルを発見した場合)。--info = progress2が進行状況の表示に「ジャンプ」しないようにする1つの方法は、同期を開始する前に、rsyncがすべてのディレクトリを再帰的にスキャンするように強制することです(増分再帰スキャンを実行するデフォルトの動作の代わりに)。 --no-inc-recursiveオプションも提供します。ただし、このオプションはrsyncのメモリ使用量とランタイムも増加させることに注意してください。


--no-inc-recursiveオプションまたはその短い--no-i-rエイリアスを使用して、増分再帰を無効にできます。(他の回答を参照)
koppor

2

rsyncプロセス(またはその他のプロセス)の/ proc // ioから情報を抽出するスクリプトを使用し、転送される合計金額を知ることで進行状況が計算されます。

#!/bin/bash

usage()
{
   echo "usage: $0 PID BASEMSIZE [DELAY[s|m|h]]"
}

if [ $# -lt 2 ]; then
   usage
   exit 1
elif [ $# -eq 3 ]; then
   DELAY=$3
else
   DELAY=5s
fi

PID=$1
PBASE=`echo "scale=2; $2/1024"|bc`

R_PID=$PID
W_PID=$PID

R_SPEED_MAX=0
W_SPEED_MAX=0
R_SPEED_CUM=0
W_SPEED_CUM=0
R_SPEED_AVG=0
W_SPEED_AVG=0

ETA=0
ETA_H=0
ETA_M=0
ETA_S=0

while [ ! -r /proc/$PID/io ];
do
   clear
   echo "Waiting for process with PID=$PID to appear!"
   sleep 1
done

B_READ_PREV=`cat /proc/$R_PID/io|awk '$1 ~ /^read_bytes/ {print $2}'`
B_WRITE_PREV=`cat /proc/$W_PID/io|awk '$1 ~ /^write_bytes/ {print $2}'`
T1=`date +%s.%N`

count=0
while true
do
   [ ! -r /proc/$PID/io ] && break
   clear
   B_READ=`cat /proc/$R_PID/io|awk '$1 ~ /^read_bytes/ {print $2}'`
   B_WRITE=`cat /proc/$W_PID/io|awk '$1 ~ /^write_bytes/ {print $2}'`
   BL_READ=`echo "scale=2; ($B_READ-$B_READ_PREV)/1048576"|bc`
   BL_WRITE=`echo "scale=2; ($B_WRITE-$B_WRITE_PREV)/1048576"|bc`
   GB_DONE=`echo "scale=2; $B_WRITE/1073741824"|bc`
   PDONE=`echo "scale=2; $GB_DONE*100/$PBASE"|bc`
   T2=`date +%s.%N`
   TLOOP=`echo "scale=2; ($T2-$T1)/1"|bc`
   R_SPEED=`echo "scale=2; $BL_READ/$TLOOP"|bc`
   W_SPEED=`echo "scale=2; $BL_WRITE/$TLOOP"|bc`

   if [ $count -ge 1 ]; then
      R_SPEED_CUM=`echo "scale=2; $R_SPEED_CUM+$R_SPEED"|bc`
      R_SPEED_AVG=`echo "scale=2; $R_SPEED_CUM/$count"|bc`
      W_SPEED_CUM=`echo "scale=2; $W_SPEED_CUM+$W_SPEED"|bc`
      W_SPEED_AVG=`echo "scale=2; $W_SPEED_CUM/$count"|bc`
      [ `echo "scale=2; $W_SPEED > $W_SPEED_MAX"|bc` -eq 1 ] && W_SPEED_MAX=$W_SPEED
      [ `echo "scale=2; $R_SPEED > $R_SPEED_MAX"|bc` -eq 1 ] && R_SPEED_MAX=$R_SPEED
   fi

   if [ `echo "scale=2; $W_SPEED_AVG > 0"|bc` -eq 1 ]; then
      ETA=`echo "scale=2; (($PBASE-$GB_DONE)*1024)/$W_SPEED_AVG"|bc`
      ETA_H=`echo "scale=0; $ETA/3600"|bc`
      ETA_M=`echo "scale=0; ($ETA%3600)/60"|bc`
      ETA_S=`echo "scale=0; ($ETA%3600)%60"|bc`
   fi

   echo "Monitoring PID: $PID"
   echo
   echo "Read:       $BL_READ MiB in $TLOOP s"
   echo "Write:      $BL_WRITE MiB in $TLOOP s"
   echo
   echo "Read Rate:  $R_SPEED MiB/s ( Avg: $R_SPEED_AVG, Max: $R_SPEED_MAX )"
   echo "Write Rate: $W_SPEED MiB/s ( Avg: $W_SPEED_AVG, Max: $W_SPEED_MAX )"
   echo
   echo "Done: $GB_DONE GiB / $PBASE GiB ($PDONE %)"
   [ `echo "scale=2; $ETA > 0"|bc` -eq 1 ] && printf "ETA: %02d:%02d:%05.2f (%.2fs)\n" $ETA_H $ETA_M $ETA_S $ETA
   echo "Elapsed: `ps -p $PID -o etime=`"

   T1=`date +%s.%N`
   sleep $DELAY
   B_READ_PREV=$B_READ
   B_WRITE_PREV=$B_WRITE
   ((count++))
done
echo "----- Finished -------------------------------------------------------------------"

2

のバージョンがオプションをrsync受け入れない--info=progress2場合は、次を使用できますtqdm

インストールするには:

pip install tqdm

使用するには:

$ rsync -av / source / dest | tqdm --unit_scale | wc -l
10.0Mit [00:02、3.58Mit / s]

1

おそらくpv、rsyncと組み合わせることができます。特に、パラメータ--sizeは役立ちます。ドキュメントを見てみると、次のようなものが機能するpv --size $(du -sb . | awk '{print $1}') | rsync -av . host:/your/pathはずです。

ここにドキュメントとソフトウェアがあります。

これを自分で試したことがありません。


1

ここでは少し遅れる可能性がありますが、将来の回答を求める人にはメリットがあります。

これも私を悩ませていたので、私は落ち込んで汚れて、最初のスクリプトを書くと思った。パッケージzenityをインストールする必要があります(sudo apt-get install zenity)が、おそらく既にインストールされているはずです。また、wmctrl(ウィンドウマネージャーコントロール)を使用して、進行状況ダイアログのタイトルを変更します。これは簡単にインストールできますが、変更しなくても違いはありません。パネルでいつ終了するかを確認したいだけです。

このスクリプトは基本的に、ソースと宛先のディレクトリを要求し、duを使用してソースに対する宛先の割合を計算し、進行状況バーを表示します。

注:これは完全なディレクトリ/ファイル同期(通常はaptキャッシュのバックアップを作成するために使用します)でのみ機能するため、--exclude = / file / in / Source-directoryオプションはありません。また、ソースディレクトリにない宛先ディレクトリにファイル/ディレクトリがある場合は機能しません。リモートソース/宛先で機能するかどうかはわかりません。テストするためのリソースやリソースが必要なかったからです。

PS。このスクリプトは非常に不適切に記述されているか、非常に非効率的です(ここではscript-virgin)が、少なくともその目的にかなうものであり、もちろん、ニーズに合わせて編集および改善することはできます。PSS。また、rsyncを強制終了するキャンセルボタンを取得できなかったため、削除しました。

    #!/bin/bash
set -e;

WELC="Running RsyncP as $USER";

function echo_progress()
{
    while (($TRANSFER_SIZE > 1000));    
    do  
        DEST_SIZE=$(du -s $DEST_FOLDER | cut -d / -f 1); 
        ((TRANSFER_SIZE=$SOURCE_SIZE-DEST_SIZE)); 
        PROGRESS_PERC=$((DEST_SIZE*100/SOURCE_SIZE));
        echo $PROGRESS_PERC;
        sleep 0.1s;
    done;
    echo 100;
    zenity --info --width=250 --title=RsyncP --text="File syncing complete!";
}

function get_input()
{
    dirs=$(zenity --forms --width=500 --title="RsyncP" --text="Enter source And destination directories" --add-entry="Source: " --add-entry="Destination: " --separator=" ");

    SOURCE_FOLDER=$(echo $dirs | cut -d' ' -f 1);
    DEST_FOLDER=$(echo $dirs | cut -d' ' -f 2);

    OPTIONS=-$(zenity --list --title="RsyncP Options" --text="Select rsync options" --separator='' --height=470 --width=470 --checklist --column "activate" --column "Option" --column "Description" FALSE v "Verbose (Terminal only)" FALSE q "Quiet, supress non-error messages (Terminal only)" FALSE P "Progress (Terminal only)" FALSE a "Archive (lrpog)" TRUE r "Recurse into directories" FALSE p "Preserve permissions" FALSE o "Preserve owner" FALSE g "Preserve group" FALSE l "Copy symlinks as symlinks");

    zenity --question --no-wrap --title="RsyncP" --width=500 --text="rsync  $OPTIONS $SOURCE_FOLDER $DEST_FOLDER\nDo you want to continue?";

    SOURCE_SIZE=$(du -s $SOURCE_FOLDER | cut -d / -f 1); 
    DEST_SIZE=$(du -s $DEST_FOLDER | cut -d / -f 1); 
    PROGRESS_PERC=$((DEST_SIZE*100/SOURCE_SIZE)); 
    TRANSFER_SIZE=1001;
}

if [ "$(id -u)" != "0" ]; then
    zenity --question --title=RsyncP --text="$WELC, Continue?";
    get_input;
    rsync  $OPTIONS $SOURCE_FOLDER $DEST_FOLDER & 
    echo_progress | zenity --progress --title=RsyncP --no-cancel --auto-close --text="Copying from \n$SOURCE_FOLDER to \n$DEST_FOLDER" ;

else            
    zenity --question --title=RsyncP --text="$WELC, Continue?";
    get_input; 
    sudo rsync  $OPTIONS $SOURCE_FOLDER $DEST_FOLDER & 
    echo_progress | zenity --progress --title=RsyncP --no-cancel --auto-close --text="Copying from \n$SOURCE_FOLDER to \n$DEST_FOLDER" ;
fi

YADを見てください。これはZenityのフォーク(書き換え?)であり、Zenityに似ていますが、ステロイドを使用しています。私のスクリプトは、Zenityのみを搭載したマシンを持っているため、Zenityへのフォールバックを備えたすべてのものに使用します。コマンドオプションはそのために十分に似ていますが、Zenityの多くの機能を失うだけです。
DocSalvager
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.