On the first summit finish of this year's race, Froome traded attacks with several of his rivals during a long and heavy hailstorm, before finally crossing the line at Andorra Arcalis just over six minutes down on breakaway winner Tom Dumoulin (Giant Alpecin).
The defending champion finished alongside Adam Yates, and Nairo Quintana, with Richie Porte and Dan Martin just two seconds down. Several other rivals lost time, while Alberto Contador retired from the race. Froome leads Yates by 16 seconds, with Martin at 19 seconds and Quintana just four more in arrears.
Froome and Team Sky's day was bookended by attacks. Contador and Alejandro Valverde broke clear on the opening climb of the Port de la Bonaigua but were eventually brought to heel in the valley before the Port del Canto.
With three climbs inside the final 50 kilometres Sky set about making the pace and still had six riders – including Froome – on the front when the reduced bunch started the final climb nearly nine minutes behind Dumoulin and the remnants of the early break.
It was Froome's teammate Sergio Henao who initiated the hostilities with a move that drew out Dan Martin, Porte and the yellow jersey. From there Froome managed to hold the floodgates from opening and even managed two of his own accelerations. Each move was shadowed by Quintana, who stuck to Froome's wheel, yet never made an attack. If today's stage and the final climb is any indication, Froome remains the favourite for overall victory but he will face attacks from a number of fronts in the Alps.
"I've said it a few times coming into the race that this is going to be the biggest battle of my career. That's what it's turning out to be. By no means did I expect this to be easier, that I would ride away from everyone. I felt that the level is higher and that I'll need to fight for every second that I can," Froome said in his post-stage press conference.
Quintana's decision to remain passive will have Sky on their toes. The Colombian has typically improved on the third week of Grand Tours and had Froome on the ropes in 2015. At this point last year he was already on the back foot but his deficit is marginal in this campaign. If he was playing mind games on the road, then Froome was willing to play them in the press conference.
"In the back of my mind I was waiting for his attack," he said when asked about the Movistar leader.
"All the way up to the last kilometre and into the last kilometre I felt that he might be saving it for one big move but that never came. I'd like to think that he was on his limit. It was a tough day out there but it looks like he stuck to my wheel like glue out there.
"That was a tough stage and the weather made it even tougher. At one stage we were pouring ice and water over our heads and the next minute we had ice falling from the sky with the hailstones and the temperature dropping. It was from one extreme to another."
Contador waves goodbye
Froome was also asked about Contador's retirement from the race after the Spaniard climbed off after enough suffering in the Tour. The two-time winner for Tinkoff has never looked comfortable in the race, crashing twice and losing ground on every climbing stage. His departure will in some way effect the race, whether he could still win it or not, a point Froome made in his press conference.
"I have to admit that I was quite surprised to hear that he got into the car today and withdrew because he attacked on the first climb and was up front. He obviously wasn't feeling too bad at the start but he's obviously still suffering with injury. It's a shame that he's no longer in the race. With him here he's only going to make the race more exciting than it already is. It's a big loss from the Tour but no doubt he'll be targeting big goals for the rest of the season.
"We're not going to have to chase his attacks from 100 kilometres out. It's one less thing for us to worry about but it's a shame for the race."
Tour de France stage 9 highlights video
Thank you for signing up to Cycling News. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.