As @Clive and @prkos mentioned in comments above, Drupal has different stream wrappers for public and private file systems:
I know you are using Drupal 7, but the Drupal 8 docs on the topic mention:
In Drupal 8, you can no longer set private file system via UI. You set it in your settings.php file.
So you might find it ...
Please see public static function Link::createFromRoute
array $options: The options parameter takes exactly the same structure. See \Drupal\Core\Url::fromUri() for details.
You can pass a 4th argument as an array with a fragment key value:
Link::createFromRoute($this->t('Title'), 'entity.node.canonical', ['node' => 77], ['fragment' => 'example']);