diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py
index 33de8fd010767..832911beb588c 100644
--- a/src/bootstrap/bootstrap.py
+++ b/src/bootstrap/bootstrap.py
@@ -31,8 +31,16 @@ def get(url, path, verbose=False):
 
     try:
         download(sha_path, sha_url, verbose)
+        if os.path.exists(path):
+            if verify(path, sha_path, False):
+                print("using already-download file " + path)
+                return
+            else:
+                print("ignoring already-download file " + path + " due to failed verification")
+                os.unlink(path)
         download(temp_path, url, verbose)
-        verify(temp_path, sha_path, verbose)
+        if not verify(temp_path, sha_path, True):
+            raise RuntimeError("failed verification")
         print("moving {} to {}".format(temp_path, path))
         shutil.move(temp_path, path)
     finally:
@@ -64,13 +72,12 @@ def verify(path, sha_path, verbose):
         found = hashlib.sha256(f.read()).hexdigest()
     with open(sha_path, "r") as f:
         expected, _ = f.readline().split()
-    if found != expected:
-        err = ("invalid checksum:\n"
+    verified = found == expected
+    if not verified and verbose:
+        print("invalid checksum:\n"
                "    found:    {}\n"
                "    expected: {}".format(found, expected))
-        if verbose:
-            raise RuntimeError(err)
-        sys.exit(err)
+    return verified
 
 
 def unpack(tarball, dst, verbose=False, match=None):
diff --git a/src/etc/get-stage0.py b/src/etc/get-stage0.py
index 28e3363189a08..127251cc802c9 100644
--- a/src/etc/get-stage0.py
+++ b/src/etc/get-stage0.py
@@ -31,8 +31,6 @@ def main(triple):
     filename = 'rustc-{}-{}.tar.gz'.format(channel, triple)
     url = 'https://static.rust-lang.org/dist/{}/{}'.format(date, filename)
     dst = dl_dir + '/' + filename
-    if os.path.exists(dst):
-        os.unlink(dst)
     bootstrap.get(url, dst)
 
     stage0_dst = triple + '/stage0'