Существующий нативный метод copy у фасада Storage предлагает копирование файла лишь в рамках одного диска:

Storage::copy('old/file1.jpg', 'new/file1.jpg'); // на диске по умолчанию
 
// или на конкретном
Storage::disk('s3')->copy('old/file1.jpg', 'new/file1.jpg');

Для того, чтобы обойти такое ограничение, придётся потратить немного памяти в процессе и выполнить потоковое чтение файла из диска-донора. Само решение предполагает чтение из одного диска и запись в другой:

// На примере 2-х явно указанных дисков
Storage::disk('s3')->putFile('path/to/file1.jpg', Storage::disk('public')->get('path/to/file1.jpg'));